14

ich den Benutzer wie so die Eingabemethode Picker zeigte, und der Kommissionierer erscheint:Wie die Eingabemethode Picker Sichtbarkeit ohne die Zugänglichkeit Erlaubnis erkennen

InputMethodManager im = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 

im.showInputMethodPicker(); 

Nun, wenn der Benutzer die Kommissionierer (zum Beispiel entlässt durch Klicke außerhalb des Pickers) Ich möchte wissen, dass das passiert ist und etwas tun (z. B. eine Benachrichtigung anzeigen).

Ich weiß, dass ich in einer Aktivität den schmutzigen Weg der Überprüfung des Fokus des Root-Layouts machen kann und weiß, dass ich mit der Barrierefreiheitserlaubnis überprüfen kann, ob dieser Systemdialog fokussiert ist oder nicht.

Das Problem ist, dass ich einen Dienst ausführen und ich muss erkennen, ob der IME-Picker angezeigt wird oder nicht, auch wenn ich nicht in meiner App (eine Drittanbieter-App zum Beispiel oder sogar die Android-Tastatureinstellungen) und auch nicht bin ich finde die Zugänglichkeit Erlaubnis ein bisschen für den Benutzer verwirrend deshalb würde ich nicht zu, dass es vorziehen, zu greifen und einen alternativen Weg zu finden.

Gibt es einen alternativen Weg?

+2

Ich hoffe, dass dies außerhalb der Verwendung der Accessibility-APIs unmöglich ist. Apps sollten die Vordergrundbenutzeroberfläche auf andere Weise nicht ausspionieren können. – CommonsWare

+0

@CommonsWare auf der anderen Seite, obwohl wir ziemlich leicht herausfinden können, welche App im Vordergrund läuft. Deswegen dachte ich, dass es vielleicht einen Weg gibt. –

+0

"Auf der anderen Seite können wir ziemlich leicht herausfinden, welche App im Vordergrund läuft" - nicht so einfach auf 5.0+ und ich arbeite mit Google daran, einen weiteren dieser Datenschutz- und Sicherheitsfehler zu schließen. – CommonsWare

Antwort

0

Dies sollte ein Kommentar sein, aber ich kann noch nicht kommentieren.

Sie könnten xposed verwenden, um das zu erreichen, aber das würde ein gerootetes Gerät erfordern, und ich schätze, das ist aus der Diskussion.

Dies ist eine Sache, die Zugänglichkeit api ist ment für. Du hast bereits gesagt, dass du den schmutzigen Weg nicht benutzen willst, also würde ich dir empfehlen, einfach die genannte API zu benutzen.

Es sollte keine Möglichkeit geben, dies aus Sicherheitsgründen zu tun (und ist nicht afaik).