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);
}
}