集成外设驱动程序

外围驱动程序库 中预先构建的驱动程序快速启动并运行。这些驱动程序提取与许多常见硬件外设相关的低级别通信细节。

在本课程中,您将学习将库驱动程序集成到应用程序中,并通过 UserDriverManager 将外设绑定到Android框架。

初始化驱动程序库

要将库驱动程序导入到应用程序中:

  1. 搜索与您的外设匹配的驱动程序的驱动程序索引
  2. 将驱动程序工件依赖关系添加到您的应用级 build.gradle 文件中:

    dependencies {
        ...
        compile 'com.google.android.things.contrib:driver-button:0.2'
    }
    
  3. 使用相应的外设I / O资源初始化驱动程序类。

  4. 当您的应用程序不再需要资源时,请关闭连接。

    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);
                }
            }
        }
    }
    
  5. 绑定框架

    驱动程序库包括支持外围设备类型的用户驱动程序。当这些驱动程序可用时,它们允许您的应用程序与标准的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);
        }
    }
    

    results matching ""

      No results matching ""