8

フレームワークのいくつかの部分は、まだ私にははっきりしていません。私は入力イベントの流れ (カーネル -> Eventhub -> InputReader -> InputDispatcher -> ...) でよく知られています。

状況

(要件: Android フレームワークを変更せずに入力キーを処理します。) デバイス (キーボード/ゲームパッド/コントローラー/...) からのキー イベントを処理したいのですが、いくつかの要件があります。1 つには、Android フレームワークを変更したくありません。これは、ホームキーが処理されている場所のWindowManagerPolicyように とその機能を拡張したくないことを意味します。interceptKeyBeforeDispatchingこれにより、キーイベントがアプリケーション層にディスパッチされますが、これは問題ありません。欠点は、ここで別のトリッキーな要件があることです。例: Angry Birds をプレイしていて、接続された入力デバイスの GoToAlpha ボタンを押すと、Alpha アプリケーションを開始する必要があります。Angry Birds は GoToAlpha がどのボタンなのか見当がつかず、それを処理/認識せず、たとえば Alpha アプリケーションを開始するためのインテントがブロードキャストされません。

質問

フォアグラウンドのアプリケーションがキーを処理できないことを知って、ディスパッチされた後に (カスタム) キー イベントを処理する方法はありますか?

私の(失敗した)解決策

  • 重要なイベントを処理するサービスを作成します。Angry Birds のようなアプリケーションがサービスにバインドされず、キー イベントがサービス内で捕捉されないため、これは不可能です。私が間違っている場合は、さらに情報を提供してください:)。

  • アプリケーションのアクティビティが独自の ActivityBase から継承できるようにする外部ライブラリを作成します。すべての重要なイベントとデフォルトの動作はここで処理できます。欠点として、既存のアプリケーションはライブラリを使用しないため、カスタム キー イベントをサポートしません。

  • フレームワークを拡張することは、私の目には最もクリーンなソリューションですが、それは私の要件を満たさない結果になります。

ヘルプや有用な情報をいただければ幸いです

追加

Intent最初の質問が何らかの方法で解決できた場合.. GoToAlpha ボタンの後ろをカスタマイズしたいと思います。つまり..デフォルトではアルファ アプリケーションが開始されますが、ユーザーがカスタマイズすると、ベータ アプリケーションが開始されます..何か考えはありますか?

ありがとう

4

2 に答える 2

3

ビクター様 コメントありがとうございます。

を使用してInputMethodServiceも、問題を処理するのに十分な自由と機能が得られません。

私の解決策/妥協

Android フレームワーク内には、PhoneWindowManagerの処理を​​担当する がありInputEventsます。WindowManagerServiceによって開始された は、このSystemServerマネージャの所有者であり、インスタンスを作成します。

独自のカスタム WindowManager を作成し、それを Android のPhoneWindowManager. この結果、新しいファイルがフレームワークに追加され、Android フレームワーク内の 1 行のみが変更されWindowManagerServiceます。PhoneWindowManagerCustomPhoneWindowManager

誰かがより良い解決策を見つけたり、私の妥協について具体的な考えを持っている場合は、遠慮なくコメントしてください. :)

于 2012-08-22T07:35:58.747 に答える
0

パブリック API でそれが可能かどうかは疑問です (Boy と Martijn はセキュリティ上の懸念を指摘しました)。

あなたの最善の策のように(Androidをカスタマイズしたくない場合)、

a) InputMethodService を使用してみてください (http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html)

それはあなたが望むような制御を与えるわけではありませんが、いくつかのニーズには十分かもしれません.

b) スタック全体 (カーネルからアプリケーションまで) を調べて、使用する脆弱性を見つけます。

これには間違いなく多くの時間がかかり、成果が得られる保証はありません。

于 2012-08-21T23:04:48.900 に答える