如何启动AccessibilityService?

16

我正在尝试使用 AccessibilityService 开始实现

Intent mailAccessabilityIntent = new Intent(this, EmailAccessabilityService.class);
startService(mailAccessabilityIntent);

我的问题是onServiceConnected()从未被调用。我该如何正确启动这个服务?

2个回答

41

因为可访问性服务能够探索和与屏幕内容交互,用户必须显式地在“设置”>“辅助功能”中启用服务。一旦服务被启用,系统将自动启动并绑定到可访问性API。

确保在应用程序清单中声明您的服务:

<service android:name=".MyAccessibilityService"
         android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
     <intent-filter>
         <action android:name="android.accessibilityservice.AccessibilityService" />
     </intent-filter>
     . . .
 </service>

您还需要为您的服务提供配置,可以通过覆盖setServiceInfo(AccessibilityServiceInfo)或添加meta-data属性和XML配置文件来实现。

meta-data属性放在<service>声明中的<intent-filter>标记之后,看起来像这样:

<meta-data android:name="android.accessibilityservice"
           android:resource="@xml/accessibilityservice" />

你引用的XML配置(在这种情况下,accessibilityservice.xml)看起来像这样:

<accessibility-service
    android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
    android:packageNames="foo.bar, foo.baz"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:accessibilityFlags="flagDefault"
    android:settingsActivity="foo.bar.TestBackActivity"
    android:canRetrieveWindowContent="true"
    . . .
/>

你可以在http://developer.android.com/reference/android/R.styleable.html#AccessibilityService找到更多可用的标签信息。


1
你真的应该得到很多赞。因为即使在 http://developer.android.com/guide/topics/ui/accessibility/services.html 的文档中也存在错误。你已经展示了制作辅助功能服务的正确方法。 - gaurav414u
1
@alanv “一旦启用服务,系统将自动启动并将其绑定到辅助功能API。” 我有一个问题,我的辅助功能服务一旦启用就可以工作。但是当它崩溃时,它会在设置中显示为已启用,但不会导致执行服务。为什么系统在崩溃后不会重新启动我的服务,但它仍然显示为已启用? - paolo2988
4
一旦系统链接服务(例如辅助功能服务)崩溃,系统不会重新启动该服务,直到权限被重置或操作系统重新启动。尝试吊销权限并重新启用它,服务将重新启动。希望能有所帮助。 - abhi
@eyal 如果这个或任何答案解决了您的问题,请考虑通过点击复选标记接受它。这向更广泛的社区表明您已找到解决方案,并为回答者和您自己赢得了一些声誉。没有义务这样做。 - Sufian
请问如何从活动中向可访问性服务传递数据,@alanv? - Raj

1
我今天刚刚完成了这个。一旦您的服务被创建并在清单文件中正确列出具有可访问性意图过滤器,那么您的服务将出现在设置-辅助功能-服务下。您可以通过单击它然后切换它来启动它。如果可能的话,我还不知道如何通过意图启动它。我认为它只能将用户导航到开始按钮。

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