如何以编程方式在Android中启用/禁用辅助function服务

我想以编程方式启用/禁用“设置” – >“辅助function”选项下列出的辅助function服务

我可以像下面这样启动Accessibility Intent:

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivityForResult(intent, 0); 

但我不知道如何通过我的代码启用在视图中列出的服务。

请给我你的意见。

我find了一个解决scheme为我打电话

 Settings.Secure.putString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "pkgname/classname"); Settings.Secure.putString(getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, "1"); 

其中pkgname是您的软件包名称,而classname是您的辅助function服务的类名称。

如果您需要启用多项服务,或者您不想破坏以前的设置,则可能需要使用:单独的其他服务。

此外,您可能需要以系统应用程序的身份运行,并且可能需要以下权限

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

然而,根据@Rupert Rawnsley这可能不适用于某些版本的Android,我正在使用Android 4.0.4,并希望它适合你。

PS。 如果它不起作用,也许你可以在/data/data/com.android.providers.settings/databases/settings.db/securefind一些运气,这就是Android存储安全设置的地方。

AccessibilityService是特殊的,不能以编程方式启动。

你可以做的最好的事情是手动打开可访问性设置:

意图intent =新的意图(Settings.ACTION_ACCESSIBILITY_SETTINGS)

并启动意图 – 您也可以从prefernece xml文件中执行此操作:

intent android:action =“android.settings.ACCESSIBILITY_SETTINGS”

从Android 6.0可以使用:

 adb shell settings put secure enabled_accessibility_services packagname/servicename 

旧版本中的settings.db在Android 6.0上不再存在。

在Android 7(API 24)中,AccessibilityService可以通过调用disableSelf()方法以编程方式禁用自身。

以防万一任何人仍然试图closures来自adb的对讲,当你被困在你的锁屏input密码或PIN。 有一件事你可以尝试的是adb shell am force-stop com.google.android.marvin.talkback

我发现这个职位: 如何以编程方式检查是否在AndroidManifest.xml中声明的服务? 。 最重要的答案是关于PackageManager,它告诉你什么在运行。