辅助功能服务可以被停止或终止吗?

4

我已经编写了一个辅助功能服务,我希望一旦该服务接收到可访问性事件(即在onAccessibilityEvent方法中),该服务将停止/终止。这可以实现吗?我尝试使用以下杀死进程的方法,但它并没有起作用。

unbindService(mSvcConn);  
android.os.Process.killProcess(android.os.Process.myPid());

我已在AndroidManifest.xml中授予以下权限。
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

我知道辅助功能服务无法在程序中启动,但是否也无法停止/终止?

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> - pradeep
2个回答

6
一种无障碍服务无法从已启用服务列表中移除自身,也不能杀死其自身的进程而不被自动重启,但您可以调用 AccessibilityService.setServiceInfo(new AccessibilityServiceInfo()) 来有效地关闭您的服务。
调用 AccessibilityManager.isEnabled() 将仍然返回 true,但您的服务将不再接收事件。

感谢Alanv的回复。您的回复似乎回答了我的问题,但我唯一担心的是当服务没有执行任何任务时它仍在运行。另外,当手机重新启动时,无障碍服务似乎会再次启动。有什么想法可以避免手机重新启动时该服务重新启动吗? - pradeep
1
您可以提示用户禁用该服务。有一些hacky的方法可以完全禁用该服务(例如禁用组件),但它们会带来更多麻烦,不值得尝试。 - alanv

3
在Android 7.0(API 24)中,您可以调用AccessibilityService上的{{link1:disableSelf()}}来禁用服务,这也会停止它。

我正在使用它,但它不起作用。你能解释一下为什么吗? - Mateen Chaudhry
1
@MateenChaudhry 在生命周期的某个时刻,disableSelf() 方法不起作用。当在 onCreate 中调用时,它将不起作用,但是当在 onServiceConnected 中调用时,它会起作用。 - darken

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