Какой уровень API необходим для получения KEYCODE_HOME KeyEvent в AccessibilityService?

Нажатие физических кнопок «Домой» на двух тестовых устройствах приводит к получению KEYCODE_HOME KeyEvent в моем AccessibilityService только на одном из устройств. Тот же производитель, другая модель, другой уровень API. Требуется ли определенный уровень API для получения KeyEvent физической кнопки «Домой»?

@Override
protected boolean onKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == KEYCODE_HOME)
        Log.d(TAG, "The event works on this device.");
    return super.onKeyEvent(event);
}

person Tamás Bolvári    schedule 31.03.2020    source источник


Ответы (1)


Я создал и протестировал 2 виртуальных устройства с разными уровнями API в эмуляторе Android. Похоже, что уровень API не имеет значения, пока используется физическая кнопка «Домой» виртуального устройства. Поэтому, если устройство не получает KEYCODE_HOME KeyEvent в AccessibilityService, виновником, вероятно, является что-то другое, а не уровень API.

В вопросе упоминается, что различаются не только уровни API, но и модели. Физическая кнопка «Домой» не вызывает KeyEvent на некоторых устройствах. Например. кнопка домой на Samsung Galaxy S8, S8+, S9, S9+, Примечание 10, Устройства Note10+ и Fold официально считаются датчиком давления, а не кнопкой. Чтобы использовать этот датчик давления (кнопка «Домой»), см. этот вопрос:

Как прочитать показания датчика давления?

 Скриншот со спецификациями Samsung Galaxy S9 и S9+ на https://www.samsung.com/global/galaxy/galaxy-s9/specs/. Датчики: диафрагма, отпечаток пальца, частота пульса, давление (!), гироскоп, приближение, акселерометр  , Геомагнитная, RGB-подсветка, Барометр, Датчик Холла. Кнопки: Вкл./Выкл., Громкость, Bixby. (Кнопки «Домой» нет в списке.)

person Tamás Bolvári    schedule 06.04.2020