集成外设驱动程序
从 外围驱动程序库 中预先构建的驱动程序快速启动并运行。这些驱动程序提取与许多常见硬件外设相关的低级别通信细节。
在本课程中,您将学习将库驱动程序集成到应用程序中,并通过 UserDriverManager
将外设绑定到Android框架。
初始化驱动程序库
要将库驱动程序导入到应用程序中:
将驱动程序工件依赖关系添加到您的应用级 build.gradle
文件中:
dependencies {
...
compile 'com.google.android.things.contrib:driver-button:0.2'
}
使用相应的外设I / O资源初始化驱动程序类。
当您的应用程序不再需要资源时,请关闭连接。
import com.google.android.things.contrib.driver.button.Button;
import com.google.android.things.contrib.driver.button.ButtonInputDriver;
...
public class ButtonActivity extends Activity {
private static final String TAG = "ButtonActivity";
private static final String BUTTON_PIN_NAME = ...; // GPIO port wired to the button
private ButtonInputDriver mButtonInputDriver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// Step 3. Initialize button driver with selected GPIO pin
mButtonInputDriver = new ButtonInputDriver(
BUTTON_PIN_NAME,
Button.LogicState.PRESSED_WHEN_LOW,
KeyEvent.KEYCODE_SPACE);
} catch (IOException e) {
Log.e(TAG, "Error configuring GPIO pin", e);
}
}
@Override
protected void onDestroy(){
super.onDestroy();
// Step 5. Close the driver and unregister
if (mButtonInputDriver != null) {
try {
mButtonInputDriver.close();
} catch (IOException e) {
Log.e(TAG, "Error closing Button driver", e);
}
}
}
}
绑定框架
驱动程序库包括支持外围设备类型的用户驱动程序。当这些驱动程序可用时,它们允许您的应用程序与标准的Android框架API(而不是外围I / O API)进行交互。
以下代码将 ButtonInputDriver
外设作为框架的关键输入注册。每次按下或释放按钮时,驱动程序将使用提供的密钥代码生成密钥事件。
import com.google.android.things.userdriver.InputDriver;
import com.google.android.things.userdriver.UserDriverManager;
...
public class ButtonActivity extends Activity {
private static final String TAG = "ButtonActivity";
...
private ButtonInputDriver mButtonInputDriver;
...
@Override
protected void onStart() {
super.onStart();
mButtonInputDriver.register();
}
@Override
protected void onStop() {
super.onStop();
mButtonInputDriver.unregister();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SPACE) {
// Handle button pressed event
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SPACE) {
// Handle button released event
return true;
}
return super.onKeyUp(keyCode, event);
}
}