如何使用按钮在Android Things中调用方法

时间:2019-07-10 17:34:15

标签: android android-studio android-things

每次按下此按钮时,我需要使用一个按钮来调用方法。 按钮的类型是GPIO

2 个答案:

答案 0 :(得分:3)

来自https://developer.android.com/things/sdk/pio/gpio

private val gpioCallback = object : GpioCallback {
        override fun onGpioEdge(gpio: Gpio): Boolean {
            // Read the active low pin state
            if (gpio.value) {
                // Pin is LOW
            } else {
                // Pin is HIGH
            }

            // Continue listening for more interrupts
            return true
        }

        override fun onGpioError(gpio: Gpio, error: Int) {
            Log.w(TAG, "$gpio: Error event $error")
        }
    }

注册回调:

class HomeActivity : Activity() {

        private var gpio: Gpio? = null
        ...

        override fun onStart() {
            super.onStart()

            // Begin listening for interrupt events
            gpio?.registerGpioCallback(gpioCallback)
        }

        override fun onStop() {
            super.onStop()
            // Interrupt events no longer necessary
            gpio?.unregisterGpioCallback(gpioCallback)
        }
    }

别忘了在清单中添加<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />权限。

答案 1 :(得分:1)

请注意,上一个答案是完全正确的。但是,您可以改用contrib-drivers中的Button驱动程序,它简化了外围设备的创建和处理,还增加了反跳功能。

您需要将库添加到gradle依赖项中。

dependencies {
    [...]
    implementation 'com.google.android.things.contrib:driver-button:+'
}

然后初始化它并注册一个OnButtonEventListener

class ButtonDriverActivity : Activity() {

    private lateinit var button: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        button = Button(GPIO_BUTTON, Button.LogicState.PRESSED_WHEN_LOW)
        buttonA.setOnButtonEventListener { button: Button, state: Boolean ->
            // Your code here
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        button.close()
    }
}

别忘了在清单中添加<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />权限。