【发布时间】:2017-09-13 10:01:39
【问题描述】:
我正在尝试通过AccessibilityService 发送系统回压事件,这可以正常工作,但前提是我不在自己的应用程序中。
无论我是否在我自己的应用程序中,我总是从performGlobalAction 获得true,但我只看到如果我不在我自己的应用程序中而是在任何应用程序中执行该事件另一个(在显示之前的活动或类似的意义上)
任何想法为什么会发生这种情况?我的应用程序是一个侧边栏应用程序,在 WindowManager 顶部绘制了一个叠加层,并且一切正常(AccessibilityService 正在运行并正在处理我的自定义事件,并且该服务始终为我的事件返回成功消息,但我自己的应用程序没有对后退按钮事件做出反应)。
我的服务如下所示:
public class MyAccessibilityService extends AccessibilityService {
public static void sendBackIntent(Context context) {
Intent intent = new Intent(context, MyAccessibilityService.class);
intent.putExtra("action", GLOBAL_ACTION_BACK);
context.startService(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
Integer action = null;
if (extras != null) {
action = extras.getInt("action");
}
if (action != null) {
switch (action) {
case GLOBAL_ACTION_BACK:
boolean result = performGlobalAction(action);
L.d("Action %d executed: %b", action, result);
break;
default:
L.e("Unhandled action %d", action);
break;
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
}
编辑
为了说明这一点:
- 我不通过
MyAccessibilityService.sendBackIntent(context)启动此服务,我发送的意图如下:if (isAccessibilityserviceRunning) MyAccessibilityService.sendBackIntent(context) - 我通过系统服务菜单启动我的服务,只需在此处启用它,然后让系统自动启动它
- 我已经在
accessibilityservice.xml中设置了AccessibilityService的所有内容,并使用它来定义我的服务设置,这也工作得很好,我想要接收的所有事件都能可靠且正确地接收
编辑 2
似乎在我的情况下,我的叠加层仍在窃取焦点,使其可聚焦,并且没有有时会出现问题的时间问题。不过,我的解决方案可以通过使用BroadcastReceiver 与服务进行通信来改进,因为startService 调用并不安全,正如接受的答案中所讨论的那样
【问题讨论】:
标签: android service accessibilityservice