2012-04-08 198 views
18

我想以編程方式啓用/禁用在設置 - >輔助功能選項下列出的輔助功能服務。如何以編程方式在Android中啓用/禁用輔助功能服務

我可以開始輔助意向象下面這樣:

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

但我沒有關於如何啓用通過我的代碼視圖中列出的服務的想法。

請給我你的意見。

回答

6

AccessibilityService是特殊的,不能以編程方式啓動。

+0

從[this](http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice-is-enabled/5106419 #5106419),啓用的AccessibilityService作爲String存儲在'Settings.Secure.getString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES)'中。一旦應用程序具有系統特權,是否可以通過遵循字符串格式啓用AccessibilityService並調用'Settings.Secure.putString(...)'? – Yeung 2014-06-30 10:01:25

+0

@Yeung原則上,但在實踐中,我發現這取決於Android和設備的版本。控制Accessibility Services的過程並不總是在不重新啓動的情況下看到這些更改。在我們的應用程序中,我們將用戶引導至設置頁面並讓他們爲我們啓用服務。 – 2014-06-30 10:23:26

+1

@Yeung Settings.Secure.putString(...)僅適用於系統應用程序。對於其他應用程序,Android不允許以編程方式打開輔助功能服務 – Kushal 2015-03-12 08:20:50

4

你能做的就是manualy打開與平易設置的最佳:

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

,並啓動意圖 - 你也可以做到這一點從該prefernece xml文件:

意圖機器人:行動= 「android.settings.ACCESSIBILITY_SETTINGS」

+0

是否可以直接進入具有切換功能的特定應用程序屏幕? – 2017-05-16 13:03:39

12

我找到了解決方案,通過調用

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

pkgname是你的包名和classname是您的無障礙服務的類名稱爲我工作。

如果您需要啓用多項服務,或者您不想破壞先前的設置,則可能需要使用:來分隔其他服務。

你也可能需要作爲系統應用運行,您可能需要以下權限

<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/secure找到一些運氣,這就是Android存儲安全設置的地方。

+0

僅適用於系統應用程序,因此該解決方案不適用於非系統應用程序 – Kushal 2015-03-12 07:14:06

+0

@Kushal是的,此解決方案僅適用於系統應用程序-sys應用程序,如果你的手機是根植的)。我認爲,由於安全問題,非系統應用可能無法通過編程啓用無障礙服務。 – Kevin 2015-03-13 09:17:29

+0

也許是一個愚蠢的問題。什麼是包名和什麼是類名? com.somepackage/MyAcessibilityService這是正確的方法嗎? – Alex 2015-09-22 00:01:05

3

從在Android 6.0,你可以使用:

adb shell settings put secure enabled_accessibility_services packagname/servicename 

的settings.db從舊版本不再出現在Android 6.0。

+0

即使在android 7上它也能工作嗎?另外,如何通過adb啓用使用權限? – 2016-10-03 07:06:48

+0

OP是關於如何以編程方式啓用/禁用不使用adb shell的輔助功能服務 – developer1011 2018-02-27 09:12:46

6

在Android 7(API 24)中,AccessibilityService可以通過調用disableSelf()方法以編程方式禁用自身。

0

只是在以下情況下仍然要求關閉當您卡在鎖定屏幕輸入密碼或PIN時,從adb對講。你可以嘗試的一件事是adb shell am force-stop com.google.android.marvin.talkback

相關問題