每次按下此按钮时,我需要使用一个按钮来调用方法。 按钮的类型是GPIO
答案 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" />
权限。