Как я могу использовать кнопку для вызова методов в Android Things - PullRequest
0 голосов
/ 10 июля 2019

Мне нужно использовать кнопку для вызова метода при каждом нажатии этой кнопки.Тип кнопки GPIO

Ответы [ 2 ]

3 голосов
/ 10 июля 2019

С 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 голос
/ 10 июля 2019

Обратите внимание, что предыдущий ответ совершенно правильный.Однако вместо этого вы можете использовать драйвер кнопки из contrib-драйверов, который упрощает создание и обработку периферийных устройств, а также добавляет отладку.

Вам необходимо добавить библиотеку в зависимости 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" /> в манифест.

...