Es gibt einige Teile des Frameworks, die mir noch nicht ganz klar sind. Ich kenne den Ablauf eines Input-Events (Kernel -> Eventhub -> InputReader -> InputDispatcher -> ...).Android Key Handling (Framework)
Situation
(Bedarf:. Eingabetaste Griff, ohne den Android-Framework zu ändern) ich von einem Gerät kommende Schlüsselereignisse zu handhaben will (Tastatur/Gamepad/Controller/...), aber es sind einige Anforderungen. Zum einen möchte ich das Android-Framework nicht ändern. Das heißt, ich möchte die WindowManagerPolicy
und ihre Funktionen wie interceptKeyBeforeDispatching
, wo der Home-Key behandelt wird, nicht erweitern. Dies würde dazu führen, dass das Schlüsselereignis in die Anwendungsebene gesendet wird, was in Ordnung ist. Der Nachteil ist, ich habe hier noch eine knifflige Anforderung. Beispiel: Wenn ich Angry Birds spiele und meine GoToAlpha-Taste an meinem angeschlossenen Eingabegerät drücke, muss die Alpha-Anwendung starten. Angry Birds hat keine Ahnung, welcher Button GoToAlpha ist, wird es nicht behandeln/erkennen und es wird zum Beispiel keine Absicht gesendet, meine Alpha-Anwendung zu starten.
Frage
Gibt es eine Möglichkeit, mein (custom) Schlüsselereignis zu behandeln, nachdem es versandt wird, wohl wissend, dass die Anwendung im Vordergrund den Schlüssel nicht umgehen kann?
My (nicht) Lösungen
einen Dienst erstellen, der die wichtigsten Ereignisse behandelt. Dies ist nicht möglich, da eine Anwendung wie "Angry Birds" nicht an meinen Dienst gebunden ist und das Schlüsselereignis nicht in meinem Dienst erfasst wird. Wenn ich falsch liege, bitte geben Sie weitere Informationen an :).
Erstellen Sie eine externe Bibliothek, in der ich die Aktivitäten meiner Anwendung von meiner eigenen ActivityBase erben lasse. Alle wichtigen Ereignisse und ihr Standardverhalten können hier behandelt werden. Nachteilige, vorhandene Anwendungen unterstützen meine benutzerdefinierten Schlüsselereignisse nicht, da sie die Bibliothek nicht verwenden.
Erweitern Sie den Rahmen wäre in meinen Augen die sauberste Lösung, aber das wird nicht meine Anforderung erfüllen.
Jede Hilfe oder nützliche Informationen würden
Extra-
Wenn die erste Frage auf der einen oder anderen .. könnte ich möchte anpassen geschätzt werden gelöst
Intent
hinter dem GoToAlpha-Button. Das bedeutet .. Durch Standard wird die Alpha-Anwendung gestartet, aber nachdem der Benutzer hat, wird die Beta-Anwendung von nun an gestartet. Irgendwelche Gedanken?
Dank
Wäre es nicht seltsam, wenn es möglich ist, wichtige Ereignisse aus anderen Anwendungen zu erfassen? Ich denke, das wäre ein Sicherheitsrisiko – Boy
True. Sobald das Schlüsselereignis das Framework verlässt, wird es nur zu einer Anwendung weitergeleitet und dort behandelt. Wenn nicht, wird es an das Framework zurückgegeben. Das würde bedeuten, dass es keine Lösung gibt, die beide Anforderungen erfüllt? – DroidBender
Meiner Meinung nach wird es wahrscheinlich keinen Weg geben, nur wegen des Sicherheitsproblems: Umgang mit wichtigen Ereignissen, während Ihre App keinen Fokus hat. Vielleicht wäre der einzige Weg, wenn Sie eine Android-Tastatur implementieren (ich habe keine Kenntnis davon)? Dies sollte in der Lage sein, Schlüsselereignisse zu behandeln (und Benutzer werden auch auf dieses Sicherheitsrisiko hingewiesen, wenn Sie eine Drittanbieter-Tastatur auswählen) – Boy