无障碍服务 - performGlobalAction() 返回false

7

我正在创建一个 Android 无障碍服务,它在 onStartCommand() 中调用 performGlobalAction()

public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("service", "started");
    Bundle extras = intent.getExtras();
    Integer value = -1;
    if (extras != null) {
        value = extras.getInt("control");
    }

    switch(value) {
        case BUTTON_EVENT_BACK:
            //press back button
             boolean result = performGlobalAction(GLOBAL_ACTION_BACK);
             Log.d("make back action result: ", Boolean.toString(result));
            break;          
        }
    stopSelf();
    return Service.START_STICKY;

}

我按照指南添加了必要的权限到清单中。
<service android:name=".MyAccessibilityService"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
  <intent-filter>
    <action android:name="android.accessibilityservice.AccessibilityService" />
  </intent-filter>
</service>

并且

<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />

所以我的问题是为什么函数调用返回false。缺少了什么?顺便说一下,返回按钮事件也没有发生。

1
你的辅助功能服务是否已启用并运行?请在 AccessibilityService.onServiceConnected() 中设置断点进行检查。此外,您可以删除 <uses-permission ... /> 标签,因为文档是错误的,只有系统才能接收此权限。 - alanv
2个回答

3
在手机的系统设置中,进入“辅助功能服务”页面,启用我的应用程序。之后它就可以正常工作了。

1
对于我的情况,抱歉仍然返回false,尽管我已经启用了它,有什么建议吗?我该如何检查我的服务是否已连接? - Ashraf Alshahawy
@AshrafAlshahawy 使用安卓工具将设备连接到笔记本电脑上,设置开发者选项中的USB调试模式,使用命令adb logcat来查看日志。 - Anton Samokat

1

在执行 performGlobalAction() 前尝试 Thread.sleep(1000)


1
对于其他人的参考,你的建议在另一个案例中很有帮助。当连续调用两个 performGlobalAction(GLOBAL_ACTION_BACK) 时,只有一个会被执行。因此,诀窍是在两次调用之间暂停一段时间(在我的情况下为500毫秒)。 - user1079425

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