如何在辅助功能服务上禁用onKeyEvent的按动键操作?

时间:2018-11-25 10:28:50

标签: android accessibilityservice

我正在开发一个Android应用,该应用可以修改按下的按键(VOLUME_UP,VOLUME_DOWN,KEYENTER)的操作

我有一个带有三个按钮的自拍杆控制器。我可以检测到按下了哪个按钮,并且可以做我想做的事而不会禁用按下的原始键事件

我需要禁用按下按钮的原始按键事件。

我的服务标签在Android Manifest中是这样的:

zoneId | chargeId
-------+---------
1          3
4          5

还有我的accesibility_service_config:

<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>

我的onKeyevent函数是:

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"

使用此代码,我可以获得按下的键,但不能禁用原始键事件。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我还是不能。

但是我找到了解决方案。

例如;

如果按键事件是“调高音量”,我可以使用AudioManager保持相同的音量。这正在处理对Volume Up原始键事件的拒绝。

此后,我可以做我想做的事。

答案 1 :(得分:0)

尝试返回“ true”而不是“ return super.onKeyEvent(event);” 如文档所述,onKeyEvent是一个过滤器,并接收事件的副本。因此,如果要使用该事件-如果仅“观察”,则应返回“ true”和“ false”。