Neue Tastatur-App, die nicht auf der Seite mit den Sprach- und Eingabeeinstellungen aufgeführt ist

Ich habe das Softkeyboard-Beispiel (eine App) des Android SDK heruntergeladen und in Android Studio importiert und auf meinem Sony xPeria Z3 mit Android 5.1.1 installiert. Allerdings sehe ich den App-Namen nicht auf der Seite mit den Sprach- und Eingabeeinstellungen .

Ich habe die Liste der installierten Apps auf meinem Telefon überprüft und sehe, dass SoftKeyboard installiert ist und in Android Studio kein Fehler auftritt.

Können Sie mir einen Weg zeigen, dieses Problem zu beheben?

Eray, siehe dies: developer.android.com/reference/android/provider/… Ich kann diese bestimmte Eingabemethode aufrufen, die die Aktivität mit adb shell am start -a android.settings.INPUT_METHOD_SETTINGSoder aktiviert adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'". Ich glaube, es ist nicht schwer, diesen Befehl in einen Code umzuwandeln.

Antworten (1)

Hinweis : Die Befehle in dieser Lösung erfordern die Einrichtung auf dem PC und die Lösung wurde auf Android 4.2.1, 5.0.2 und 5.1.1 getestet.


Immer wenn eine App, die mit einem IME-Dienst ausgestattet ist, im System installiert wird, muss der Besitzer des Geräts ausdrücklich zulassen, dass die App Teil der aktivierten Eingabemethoden wird, um ihren IME mit dem System zu verbinden .

Wie passiert es also? Wir wissen, dass wir die Befehlszeile verwenden können, aber das ist nicht das, was normale Benutzer tun.

Es passiert so. Wenn Sie diese App starten, werden oder würden Sie aufgefordert, ihre Tastatur zu aktivieren. Sie werden dann zu einer Unteraktivität der App „Einstellungen“ weitergeleitet. In ROMs in der Nähe von Standard-Android kann ein Benutzer auf diese Unteraktivität über Einstellungen → Sprache & Eingabe → Aktuelle Tastatur → Tastaturen auswählen zugreifen . So sieht es bei manchen Geräten aus:

(Zum Vergrößern auf das Bild klicken; Bild mit freundlicher Genehmigung von OP)

IMG:

Alternativ können Sie die Befehlszeile verwenden, um diese Unteraktivität anzuzeigen

adb shell am start -a android.settings.INPUT_METHOD_SETTINGS
adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'"  # alternative to above command

Für eine App wird in dem Moment, in dem Sie den Schieberegler in dieser Unteraktivität nach rechts drehen, die IME-ID an den Wert von enabled_input_methods angehängt – eine sichere Einstellung. Die App wird dann unter den bereits aktivierten Eingabemethoden unter Einstellungen → Sprache & Eingabe aufgelistet .

Da nur ein IME als Standard-IME im System verbleiben kann, zeigt Ihnen die App dann einen Dialog, um eine Tastatur-App als Standard auszuwählen. Auf diesen Dialog kann über Einstellungen → Sprache & Eingabe → Aktuelle Tastatur zugegriffen werden . Unabhängig davon, welchen Eintrag Sie dort auswählen, wird die Standardtastatur im Gerät.

Jetzt, da Sie die Details kennen, können Sie jetzt ganz einfach eine Tastatur zu aktivierten Eingabemethoden hinzufügen, einschließlich Ihrer Beispiel-Tastatur-App.


Aktivieren der Tastatur über die Befehlszeile

Es gibt auch einen anderen Weg. Alle aktivierten Eingabemethoden können mit diesem Befehl aufgelistet werden:

adb shell ime list -s

Beispielausgabe

com.android.inputmethod.latin/.LatinIME
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard

Alle verfügbaren (aktivierten oder nicht aktivierten) IME-Dienste können aufgelistet werden

adb shell ime list -a

Beispielausgabe

com.android.inputmethod.latin/.LatinIME:
  mId= com.android.inputmethod.latin/.LatinIME mSettingsActivityName=com.android.inputmethod.latin.settings.SettingsActivity
  mIsDefaultResId=0x7f070000
  Service:
    Priorität=0 PreferredOrder=0 Match=0x108000 SpecificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.android.inputmethod.latin.LatinIME
      Paketname=com.android.inputmethod.latin
      labelRes=0x7f08003a nonLocalizedLabel=null icon=0x0 banner=0x0
      enabled=true exported=true processName=com.android.inputmethod.latin
      permission=android.permission.BIND_INPUT_METHOD
      flags=0x0
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard:
  mId= net.zhdev.ctrlvkeyboard/.CtrlVKeyboard mSettingsActivityName=null
  mIsDefaultResId=0x0
  Service:
    Priorität=0 PreferredOrder=0 Match=0x108000 SpecificIndex=-1 isDefault=false
    ServiceInfo:
      name=net.zhdev.ctrlvkeyboard.CtrlVKeyboard
      Paketname=net.zhdev.ctrlvkeyboard
      labelRes=0x7f0b0015 nonLocalizedLabel=null icon=0x0 banner=0x0
      enabled=true exported=true processName=net.zhdev.ctrlvkeyboard
      permission=android.permission.BIND_INPUT_METHOD
      flags=0x0
com.touchtype.swiftkey/com.touchtype.KeyboardService:
  mId= com.touchtype.swiftkey/com.touchtype.KeyboardService mSettingsActivityName=com.touchtype.settings.TouchTypeKeyboardSettings
  mIsDefaultResId=0x0
  Service:
    Priorität=0 PreferredOrder=0 Match=0x108000 SpecificIndex=-1 isDefault=false
    ServiceInfo:
      name=com.touchtype.KeyboardService
      Paketname=com.touchtype.swiftkey
      enabled=true exported=true processName=com.touchtype.swiftkey
      permission=android.permission.BIND_INPUT_METHOD
      flags=0x0

Die hervorgehobenen Zeichenfolgen daneben mId=sind die IDs der Tastatur-Apps, die in meinem System verfügbar sind.

In jeder ID /ist die Zeichenfolge davor der Paketname der Tastatur-App. Beispiel: Für die Swiftkey-Tastatur lautet die mId:

com.touchtype.swiftkey/com.touchtype.KeyboardService

Die Zeichenfolge com.touchtype.swiftkeyist der Paketname der Swiftkey-App. Der Paketname hilft Ihnen, die entsprechende mID zu finden, die Sie verwenden sollten, um eine bestimmte Tastatur-App zu aktivieren.

Um den Paketnamen einer App zu erfahren, folgen Sie Vollständiger Paketname der App anzeigen?

Um einen IME zu aktivierten Eingabemethoden hinzuzufügen oder zu entfernen, tun Sie dies

# replace ID with mId of the keyboard app which you want to add or remove

adb shell ime enable ID   
adb shell ime disable ID  

Um einen IME zum Standard-IME des Systems zu machen, tun

# Note that it doesn't matter whether the IME is added into enabled input methods or not. Consider this a direct override.

adb shell settings put secure default_input_method "ID"
adb shell content update --uri content://settings/secure --bind value:s:"ID"  --where "name='default_input_method'"  # alternative to above command
Entschuldigung, ich codiere nicht, daher kann ich kein Beispiel (programmgesteuert) zum Starten dieser Aktivität bereitstellen. Dies ist alles, was einem Endbenutzer helfen kann.