2012-04-08 2 views
18

wie programmgesteuert zu aktivieren/deaktivieren Ich möchte die Eingabehilfen, die unter Einstellungen-> Eingabehilfe-Option aufgeführt sind, programmgesteuert aktivieren/deaktivieren.Wie programmierbarer Zugänglichkeits-Dienst in Android

konnte ich Zugänglichkeit Intent beginnen wie folgt:

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

Aber ich habe keine Ahnung, wie die Dienste in der Ansicht durch meinen Code aufgeführt zu ermöglichen.

Bitte geben Sie mir Ihre Ansichten.

Antwort

6

AccessibilityService ist speziell und kann nicht programmgesteuert gestartet werden.

+0

Von [dieser] (http://stackoverflow.com/questions/5081145/android-how-do-you-check-if-a-particular-accessibilityservice-is-enabled/5106419 # 5106419), der aktivierte AccessibilityService wird als String von 'Settings.Secure.getString (getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES)' gespeichert. Ist es nicht möglich, AccessibilityService zu aktivieren, indem Sie dem String-Format folgen und 'Settings.Secure.putString (...)' aufrufen, sobald die App über Systemprivilegien verfügt? – Yeung

+0

@Yeung Im Prinzip, aber in der Praxis habe ich festgestellt, dass dies abhängig von der Version von Android und dem Gerät Hit-and-Miss ist. Der Prozess, der Accessibility Services steuert, sieht diese Änderungen nicht immer ohne Neustart. In unserer App leiten wir den Nutzer auf die Einstellungsseite und lassen ihn den Service für uns aktivieren. –

+1

@Yeung Settings.Secure.putString (...) funktioniert nur für Systemanwendungen. Für andere Anwendungen, Android nicht zulassen, Zugänglichkeitsdienst programmgesteuert zu drehen – Kushal

4

Das Beste, was Sie tun können, ist manualy die Rollstuhl Einstellungen öffnen mit:

Intent Absicht = new Intent (Settings.ACTION_ACCESSIBILITY_SETTINGS)

und die Absicht starten - Sie können es auch von die prefernece xML-Datei:

Absicht android: action = "android.settings.ACCESSIBILITY_SETTINGS"

+0

Ist es möglich, direkt auf den Bildschirm der spezifischen App zu gehen, die den Schalter dort hat? –

12

fand ich eine Lösung für mich gearbeitet durch

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

Aufruf Wo die pkgname Ihre Paketnamen und die classname ist der Klassenname Ihres Zugänglichkeit Service.

Wenn Sie mehrere Dienste aktivieren müssen oder die vorherigen Einstellungen nicht löschen möchten, können Sie : verwenden, um andere Dienste zu trennen.

Darüber hinaus müssen Sie möglicherweise als System Anwendung auszuführen und Sie könnten die folgenden Berechtigungen

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

Allerdings müssen nach @Rupert Rawnsley dies nicht auf einigen Versionen von Android funktionieren könnte, ich bin auf Android 4.0.4 und hoffe es funktioniert für dich.

PS. Wenn es nicht funktioniert, könnten Sie vielleicht Glück in /data/data/com.android.providers.settings/databases/settings.db/secure finden, dort speichert Android sichere Einstellungen.

+0

wird nur Systemanwendungen zugewiesen, so dass diese Lösung nicht für Nicht-Systemanwendungen funktioniert – Kushal

+0

@Kushal Ja, diese Lösung funktioniert nur für Systemanwendungen (oder nicht -sys Apps, wenn Ihr Telefon gerootet ist). Und ich denke, dass eine Nicht-System-App aufgrund von Sicherheitsproblemen einen Accessibility Service möglicherweise nicht programmatisch aktivieren kann. – Kevin

+0

Vielleicht eine dumme Frage. Was ist der Paketname und was ist der Klassenname? com.somepackage/MyAcessibilityService ist das der richtige Weg? – Alex

3

Von Android 6.0 können Sie verwenden:

adb shell settings put secure enabled_accessibility_services packagname/servicename 

Die settings.db aus alten Versionen sind nicht mehr vorhanden auf Android 6.0.

+0

Funktioniert es auch auf Android 7? Wie aktiviere ich den Nutzungszugriff über adb? –

+0

Bei OP geht es darum, den Dienst für Eingabehilfen, der die adb-Shell nicht verwendet, programmgesteuert zu aktivieren/deaktivieren – developer1011

6

In Android 7 (API 24) kann sich ein AccessibilityService programmatisch selbst deaktivieren, indem er die disableSelf()-Methode aufruft.

0

Nur für den Fall, dass jemand immer noch sucht Talkback von adb deaktivieren, wenn Sie in Ihrem Sperrbildschirm stecken das Passwort eingeben oder Pin. Eine Sache, die Sie versuchen können, ist adb shell am force-stop com.google.android.marvin.talkback