フレームワークのいくつかの部分はまだ私には明らかではありません。私は入力イベント(Kernel - > Eventhub - > InputReader - > InputDispatcher - > ...)の流れでよく知られています。Android Key Handling(フレームワーク)
状況
(要件:Androidのフレームワークを変更することなく、入力キーを処理します)私は、デバイス(キーボード/ゲームパッド/コントローラー/ ...)しかしからのキーイベントを処理したい ありいくつかの要件があります。 1つは、Androidのフレームワークを変更したくないということです。つまり、私はWindowManagerPolicy
とその機能をinterceptKeyBeforeDispatching
のように延長したくないのです。ホームキーが扱われています。これにより、キーイベントがアプリケーションレイヤーにディスパッチされ、うまくいきます。欠点は、私は別のトリッキーな要件があることです。 例:Angry Birdsを再生しているときに、接続された入力デバイスでGoToAlphaボタンを押すと、Alphaアプリケーションが起動する必要があります。 Angry Birdsには、GoToAlphaボタンが処理/認識されないなどのヒントはありません。たとえば、Alphaアプリケーションを起動する意図はありません。
質問
は、それがディスパッチされた後、私の(カスタム)キーイベントを処理する方法は、フォアグラウンドでアプリケーションがキーを扱うことができないことを知って、ありますか?
マイ(失敗)ソリューション
キーイベントを処理するサービスを作成します。 Angry Birdsのようなアプリケーションは私のサービスにバインドされず、キーイベントは私のサービスの中で捕捉されないので、これは不可能です。私が間違っている場合、より多くの情報を提供してください:)。
私のアプリケーションのアクティビティが自分自身のActivityBaseから継承できるようにする外部ライブラリを作成します。すべてのキーイベントとデフォルトの動作がここで処理できます。残念ながら、既存のアプリケーションは、ライブラリを使用していないため、カスタムキーイベントをサポートしません。
フレームワークを拡張すると、私の目では最もクリーンな解決策になりますが、それは自分の要求を満たしていないことになります。
最初の質問は一つの方法または別に解決することができれば任意のヘルプや有用な情報は、..私は が私をカスタマイズしたい
エクストラ
をいただければ幸いですGoToAlphaボタンの後ろの
Intent
。つまり、 デフォルトでは、Alphaアプリケーションが起動されますが、ユーザーに がカスタマイズされた後、ベータアプリケーションは今から開始されます.. Any thoughts?
おかげ
他のアプリケーションからキーイベントを取得することは可能でしょうか?私はこれがセキュリティリスク – Boy
本当であると思います。キーイベントがフレームワークを離れると、それは1つのアプリケーションのみに移動し、そこで処理されます。そうでなければ、フレームワークに返されます。これは、両方の要件を満たすソリューションがないことを意味しますか? – DroidBender
私の意見では、セキュリティ上の問題のために、おそらく方法はありません:あなたのアプリケーションに焦点が当てられていない間に主要なイベントを処理する。もしあなたがAndroidキーボードを実装しているのであれば、唯一の方法だろうか?これはキーイベントを処理できるはずです(サードパーティのキーボードを選択すると、ユーザーはこのセキュリティリスクを指摘します) – Boy