フレームワークのいくつかの部分は、まだ私にははっきりしていません。私は入力イベントの流れ (カーネル -> Eventhub -> InputReader -> InputDispatcher -> ...) でよく知られています。
状況
(要件: Android フレームワークを変更せずに入力キーを処理します。)
デバイス (キーボード/ゲームパッド/コントローラー/...) からのキー イベントを処理したいのですが、いくつかの要件があります。1 つには、Android フレームワークを変更したくありません。これは、ホームキーが処理されている場所のWindowManagerPolicy
ように とその機能を拡張したくないことを意味します。interceptKeyBeforeDispatching
これにより、キーイベントがアプリケーション層にディスパッチされますが、これは問題ありません。欠点は、ここで別のトリッキーな要件があることです。例: Angry Birds をプレイしていて、接続された入力デバイスの GoToAlpha ボタンを押すと、Alpha アプリケーションを開始する必要があります。Angry Birds は GoToAlpha がどのボタンなのか見当がつかず、それを処理/認識せず、たとえば Alpha アプリケーションを開始するためのインテントがブロードキャストされません。
質問
フォアグラウンドのアプリケーションがキーを処理できないことを知って、ディスパッチされた後に (カスタム) キー イベントを処理する方法はありますか?
私の(失敗した)解決策
重要なイベントを処理するサービスを作成します。Angry Birds のようなアプリケーションがサービスにバインドされず、キー イベントがサービス内で捕捉されないため、これは不可能です。私が間違っている場合は、さらに情報を提供してください:)。
アプリケーションのアクティビティが独自の ActivityBase から継承できるようにする外部ライブラリを作成します。すべての重要なイベントとデフォルトの動作はここで処理できます。欠点として、既存のアプリケーションはライブラリを使用しないため、カスタム キー イベントをサポートしません。
フレームワークを拡張することは、私の目には最もクリーンなソリューションですが、それは私の要件を満たさない結果になります。
ヘルプや有用な情報をいただければ幸いです
追加
Intent
最初の質問が何らかの方法で解決できた場合.. GoToAlpha ボタンの後ろをカスタマイズしたいと思います。つまり..デフォルトではアルファ アプリケーションが開始されますが、ユーザーがカスタマイズすると、ベータ アプリケーションが開始されます..何か考えはありますか?
ありがとう