Android accessibilityService中的onKeyEvent()未按预期工作

Android accessibilityService中的onKeyEvent()未按预期工作,android,accessibility,accessibilityservice,Android,Accessibility,Accessibilityservice,我在一个AccessibilityService中添加了一个onKeyEvent()。我知道当按下一个键(在我的例子中是音量按钮)时,onKeyEvent()会被调用两次,一次用于ACTION\u DOWN,一次用于ACTION\u UP 当用户提供可访问性权限并打开我的应用程序时,一切都会正常工作 然后,用户杀死了我的应用程序,这次当我按下音量按钮onKeyEvent()时,调用了4次(2个动作向下,2个动作向上) 然后用户打开我的应用程序,然后从最近的应用程序中删除它。这次 onKeyEve

我在一个
AccessibilityService
中添加了一个
onKeyEvent()
。我知道当按下一个键(在我的例子中是音量按钮)时,
onKeyEvent()
会被调用两次,一次用于ACTION\u DOWN,一次用于ACTION\u UP

当用户提供可访问性权限并打开我的应用程序时,一切都会正常工作

然后,用户杀死了我的应用程序,这次当我按下音量按钮
onKeyEvent()
时,调用了4次(2个动作向下,2个动作向上)

然后用户打开我的应用程序,然后从最近的应用程序中删除它。这次
onKeyEvent()
被调用6次(3个动作向下,3个动作向上)

这种情况持续不断

我没有在onAccessibilityEvent()和onDestory()上做任何事情

根据@Mike M的建议,我已改为onServiceConnected,但我仍然面临相同的错误

onServiceConnected()
中,我正在执行以下操作:

    info.flags=AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS;

    info.flags=AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;

    setServiceInfo(info);
这是我的onKeyEvent()


如何解决此问题?

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

这是否有助于解决此错误?既然如此,我想我已经在xml和onStartCommand()中进行了配置我观察到这种情况只发生在根设备中。它在非根设备中工作正常如果这种情况只发生在根设备中,那么这是一种异常,这意味着您必须处理不好的情况,例如,其中之一可能只涉及指定时间窗口(例如200ms)中的第一个事件并忽略其他重复事件。显然,该服务不会随应用程序一起终止。描述这个“问题”背后的背景/潜在原因可能会很有用。从用户的角度来看,你想实现什么,为什么?例如,如果您所做的只是试图检测用户何时向上/向下按音量,那么您不需要辅助功能服务。
 @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);

    }

}