2

私は現在、方向パッド (上、下、左、右) をシミュレートするアプリに取り組んでいます。問題は、これらのキーの押下を他のアプリケーションに送信する方法がわからないことです。

現在、インストルメンテーションを使用しており、アプリのアクティビティで完全に機能します。矢印キーの左のコードのスニペットを次に示します。

new Thread(new Runnable() {         
                    @Override
                    public void run() {                 
                        new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
                    }   
                }).start();

この実装の問題は、Android のセキュリティ機能により、キーの押下を他のアプリケーションに送信できないことです。キープレスを挿入するさまざまな方法を検索した後、この記事に出会いました。ただし、サンプルコードを試してみると、うまくいかないようです。いろいろ調べてみると、Android にはキーボード用の入力デバイスがないようです。さまざまな入力デバイスをスキャンすると、方向センサーなどの情報が得られます。これは、私の電話 (T-959 Galaxy S) のすべての入力デバイスの写真です。

入力デバイス

ご覧のとおり、これらのデバイスはどれもキーボードではありません。これは、私の電話に物理的なキーボードがないためだと思います。(cypress は静電容量式キー、aries は音量ボタン、mxt224 はタッチスクリーン コントローラー)

もう少し調査した結果、Android のアクセシビリティ API にはイベントを注入する機能が制限されていることがわかりましたが、それらはビュー フォーカスの切り替えなど ( AccessibilityNodeInfo ) などの非常に基本的なものにすぎません。ただし、矢印キーの押下をサポートするように拡張できる可能性があると感じています。

そのため、現在、どこに行こうか非常に迷っています。誰かがこれまでにこのようなことをしたことがありますか? Android のセキュリティ機能により、矢印キー (他には何もない) の単純な挿入は非常にイライラするようです。すべての提案を歓迎します。

編集:私はあまり明確ではないかもしれませんが、ルート化された電話のみのためにこれを構築しても問題ありません。唯一の要件は、otg を介して外部キーボードに接続したり、adb を介してコンピューターに接続したりせずに、このアプリを電話でスタンドアロンで実行する必要があることです。

4

2 に答える 2

4

数日前に DPAD キーを押すイベントをシミュレートしたかったのですが、独自の制限がある解決策を見つけました。

矢印キーの押下は、 adbコマンドを使用してシミュレートできますinput keyevent <keycode>。したがって、DPAD LEFT キーの押下をシミュレートする場合は、adb コマンドを使用しますadb input keyevent 21

このコードを再利用して拡張するために、キーイベントを送信する必要があるデバイスを選択し、コンピューターの既存のキーボードを使用してキーを入力できるスタンドアロンのスイングアプリケーションを作成しました。キーボードのキーコードを Android のキーコードに変換]。

リモート ボタンとゲーム パッド ボタンを含めて、アプリケーションをさらにスケーリングしています。完了したら、プロジェクトを git にアップロードします。

お役に立てれば。

于 2013-03-19T05:20:20.093 に答える
0

ルート化されていない電話で動作するアプリケーションを作成することを意図している場合、おそらく最善の策は、http: //developer.android.com/reference/android/inputmethodservice/InputMethodService.html を使用して新しい InputMethod を実装することです。

于 2013-03-19T14:32:21.147 に答える