Как я могу отключить действие нажатой клавиши onKeyEvent в службе специальных возможностей?

Я разрабатываю приложение для Android, которое изменяет действия нажатых клавиш (VOLUME_UP, VOLUME_DOWN, KEYENTER)

У меня есть контроллер для селфи-палки с тремя кнопками. Я могу определить, какая кнопка нажата, и я могу что-то сделать, не отключая исходное событие нажатия клавиши

Мне нужно отключить исходное ключевое событие нажатия кнопки.

Мой сервисный тег выглядит так в манифесте Android:

<service android:name=".CustomListener"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        android:label="@string/accessibility_service_label">
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config" />
    </service>

И мой accessibility_service_config выглядит так:

xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagRequestFilterKeyEvents"
android:canRequestFilterKeyEvents="true"
android:canRetrieveWindowContent="true"
android:notificationTimeout="50"
android:packageNames="com.custom333.clevent"

И моя функция onKeyevent:

@Override
protected boolean onKeyEvent(KeyEvent event) {
    int keyCode = event.getKeyCode();

    KeyEvent.KEYCODE_META_RIGHT
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            Log.d("##CURRENTKEY", "Volume -");

        case KeyEvent.KEYCODE_VOLUME_UP:
            Log.d("##CURRENTKEY", "Volume +");
            return false;
    }
    return super.onKeyEvent(event);
}

С помощью этого кода я могу получить нажатую клавишу, но не могу отключить исходные ключевые события.

Кто-нибудь может мне помочь в этом?


person Kaan Kırıkoğlu    schedule 25.11.2018    source источник


Ответы (2)


Попробуйте вернуть "true" вместо "return super.onKeyEvent(event);" Как сказано в документации, onKeyEvent является фильтром и получает копии событий. Итак, если мы собираемся потреблять событие - мы должны вернуть "true" и "false", если только "наблюдение".

person Roman T.    schedule 11.05.2019
comment
Я нашел решение 5-6 месяцев назад. Но решение было таким, так что это правильное решение :) Спасибо, приятель. - person Kaan Kırıkoğlu; 13.05.2019
comment
Потрясающий! Рад помочь - person Roman T.; 29.08.2019

Я все еще не мог этого.

Но я нашел решение для себя.

Например;

Если событием нажатия клавиши является увеличение громкости, я могу сохранить тот же уровень громкости с помощью AudioManager. Это обрабатывает отклонение исходного ключевого события Volume Up.

После этого я могу делать то, что хочу.

person Kaan Kırıkoğlu    schedule 29.11.2018