如何以编程方式启用/禁用Android中的辅助功能服务

Abi*_*ash 26 service android accessibility

我想以编程方式启用/禁用"设置 - >辅助功能"选项下列出的辅助功能服务.

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

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)

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

请给我你的看法.

Kev*_*vin 18

我通过电话找到了一个解决方案

Settings.Secure.putString(getContentResolver(), 
    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "pkgname/classname");
Settings.Secure.putString(getContentResolver(), 
    Settings.Secure.ACCESSIBILITY_ENABLED, "1");
Run Code Online (Sandbox Code Playgroud)

pkgname是你的包名和classname为您的辅助服务的类名.

如果您需要启用多个服务,或者您不希望破坏以前的设置,则可能需要使用:这些服务来分离其他服务.

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

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
Run Code Online (Sandbox Code Playgroud)

但是,根据@Rupert Rawnsley的说法,这可能不适用于某些版本的Android,我正在使用Android 4.0.4并希望它适合你.

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

  • <uses-permission android:name ="android.permission.WRITE_SECURE_SETTINGS"/>仅提供给系统应用程序,因此该解决方案不适用于非系统应用程序 (5认同)
  • @Alex 抱歉,已经过去很长时间了,我现在没有代码。但据我记得,它应该是 com.somepackage/.MyAcessibilityService 或 com.somepackage/com.sompackage.MyAcessibilityService。另外,我发现较新版本的 Android 可能会忽略此代码。我必须直接编写数据库。可能有点难看,但它确实有效。供参考 (2认同)

小智 8

从Android 6.0开始,您可以使用:

adb shell settings put secure enabled_accessibility_services packagname/servicename
Run Code Online (Sandbox Code Playgroud)

Android 6.0上不再提供旧版本中的settings.db.


Sam*_*Sam 8

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

  • 使用如下静态引用:`static WeakReference&lt;MyAccessibilityService&gt; ref = null`,然后在服务的`onCreate()`中使用`if(ref != null &amp;&amp; ref.get() != null) ref.get() .disableSelf();`。使用WeakReference避免内存泄漏 (2认同)

Rup*_*ley 5

AccessibilityService很特殊,无法以编程方式启动.


Era*_*sav 5

最好的办法是使用以下方法手动打开辅助功能设置:

意向意向=新意向(Settings.ACTION_ACCESSIBILITY_SETTINGS)

并启动意图-您也可以从prefernece xml文件中进行操作:

意向android:action =“ android.settings.ACCESSIBILITY_SETTINGS”

  • 是否可以直接转到具有切换功能的特定应用程序的屏幕? (2认同)

Rya*_*n B -7

我找到了这篇文章:How to programmatically check if a service is returned in AndroidManifest.xml? 。最上面的答案谈到了 PackageManager,它告诉您正在运行的内容。