在辅助功能服务中,onKeyEvent() 方法不能按预期工作

3

我在一个AccessibilityService中添加了一个onKeyEvent()。 我知道当按键被按下(在我的情况下是音量按钮)时,onKeyEvent()会被调用两次,一次为ACTION_DOWN,一次为ACTION_UP。

当用户提供辅助功能权限并打开我的应用程序时,一切正常。

然后用户关闭我的应用程序,这时当我按音量按钮时,onKeyEvent()被调用4次(2个ACTION_DOWN和2个ACTION_UP)。

然后用户再次打开我的应用程序,然后从最近使用的应用中关闭它。 这次onKeyEvent()被调用6次(3个ACTION_DOWN和3个ACTION_UP)

这种情况一直持续。

我在 onAccessibilityEvent() onDestroy()中什么都没有做。

在@Mike M的建议下,我改成了onServiceConnected,但我仍然面临相同的错误。

onServiceConnected()中,我正在做这些事情:

    info.flags=AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS;

    info.flags=AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;

    setServiceInfo(info);

这是我的onKeyEvent()。
 @Override

  public boolean onKeyEvent(KeyEvent event) {

    Log.v("accessibilityservice","inside onKeyEvent")

    int action = event.getAction();

    int keyCode = event.getKeyCode();

    if (action == KeyEvent.ACTION_UP) {

        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {

            Log.d("Hello", "KeyUp");

        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {

            Log.d("Hello", "KeyDown");

        }

        return true;

    } else {

        return super.onKeyEvent(event);

    }

}

我怎样解决这个问题?


那样做有助于解决这个错误吗? - Sunilkumar Ramamurthy
既然你这么说,我想我已经在xml和onStartCommand()中都进行了配置。 - Sunilkumar Ramamurthy
1
我观察到这只发生在已经root的设备上。在非root的设备上它运行良好。 - Sunilkumar Ramamurthy
1
如果这只发生在已经root的设备上,那么这是一个异常情况,意味着你必须处理它,其中一个可能是,例如,仅关注指定时间窗口(例如200毫秒)中的第一个事件,并忽略其他重复事件。 - azizbekian
显然,该服务没有随您的应用程序一起被终止。描述这个“问题”背后的故事/根本原因可能很有用。从用户角度来看,您想要实现什么?为什么?例如,如果你只是想检测用户何时按下音量加/减键,那么你不需要一个辅助功能服务。 - Nerdy Bunz
2个回答

0

为什么不尝试在OnServiceConnected事件或一些更长的生命周期中检测服务/应用程序是否已经注册?


0
Stop the service when your app stops (in onDestroy)
in Kotlin (translate in java with decompiler)
 autoClickService?.let {
            Log.d("DBGAPP", "stop auto click service Ondestroy")
            it.stopSelf()
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                it.disableSelf()
            }`enter code here`
            //autoClickService = null
        } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接