2

私の質問は自明です。たくさん検索しましたが、最近のアクティビティボタンのクリックを処理する方法が見つかりませんでした。Android3.0タブレットのステータスバーにある[最近のアクティビティ]ボタンのハードウェアボタンのクリックを無視したい。

現在、私がこれまでに試したことは次のとおりです。

public boolean onKeyDown(int keyCode, KeyEvent event) {

       if(keyCode == KeyEvent.KEYCODE_BACK) 
       { 
              return true;
       }
       // in the same way I have written it for KEYCODE_HOME
}

最近のアクティビティボタンを処理するために何を書くべきか教えていただけますか?

よろしくお願いします。:)

編集:これは私が今試したことです。KEYCODE_APP_SWITCHが機能していません。

public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.e("INSIDE", "LOCKDEMO");
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.e("KEY EVENT", "BACK");
            return true;
        }
        if (keyCode == KeyEvent.KEYCODE_HOME) {
            Log.e("KEY EVENT", "HOME");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_FROM_SYSTEM) {
            Log.e("KEY EVENT", "SYSTEM");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_KEEP_TOUCH_MODE) {
            Log.e("KEY EVENT", "TOUCH MODE");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_SOFT_KEYBOARD) {
            Log.e("KEY EVENT", "SoFT KEYBOARD");
            return true;
        }
        if(keyCode == KeyEvent.FLAG_VIRTUAL_HARD_KEY) {
            Log.e("KEY EVENT", "HARDWARE KEY");
            return true;
        }
        if(keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
            Log.e("KEY EVENT", "APP SWITCH");
            return true;
        }

        Log.e("KEY EVENT", "NOT HANDLED");
        return super.onKeyDown(keyCode, event);
    }

最近のAppBtnを押すと、最後のLogステートメントも出力されません。つまり、イベントは処理されません。

4

2 に答える 2

6

ドキュメントを覗いてみると、それKeyEvent.KEYCODE_APP_SWITCHがあなたが探しているものだと思います。

ただし、アプリケーションスイッチャーを押したときに、 ( -parameterで) KeyEvent.getKeyCode()-methodを使用して、eventトリガーされたキーコード(およびトリガーされたキーがあるかどうか)を確認することもできます。


私はしばらくこれをいじってみましたが、それは不可能であるという結論に達しました。

-eventはどちらにもKEYCODE_APP_SWITCH配信されません。エルゴ、扱えません。onKeyDown()dispatchKeyEvent()

また、KEYCODE_HOME-eventも上記のいずれのメソッドにもディスパッチされなくなったため、Android4デバイスで問題が発生します。ドキュメントを参照してください:

キーコード定数:ホームキー。このキーはフレームワークによって処理され、アプリケーションに配信されることはありません


また、実際のロック画面を自分で作成するための実際の簡単なアプローチはないようです。このディスカッションを参照してください:カスタムロック画面の開発

デフォルトのロック画面にカスタム情報を表示することは十分に可能です。ロック画面にカスタマイズされたメッセージを表示する方法はありますか?


完全を期すために:Android Lでは、「アプリでユーザーをロック」できるため、ハードウェアキーを手動で上書きする必要はありません。関連情報は次のとおりです。

L Developer Previewは、ユーザーがアプリを離れたり、通知によって中断されたりするのを一時的に制限できる新しいタスクロックAPIを導入しています。これは、たとえば、Androidでハイステークス評価要件をサポートする教育アプリを開発している場合に使用できます。アプリがこのモードをアクティブにすると、アプリがモードを終了するまで、ユーザーは通知を表示したり、他のアプリにアクセスしたり、ホーム画面に戻ったりすることができなくなります。

于 2012-08-20T14:02:09.890 に答える
1

キオスクモードでルート化されたアプリを実行する場合は、 com.android.systemuiを無効にして、ボタンをソフトボタンに置​​き換えることができる場合があります(たとえば、Button Saviorアプリですが、デバイスをブリックしないように注意してください)。多くの化粧品が消えたようで、それがシステムの安定性に何らかの形で影響を与えるかどうかはわかりませんが、これまでのところ機能させています。

誰かがcom.android.systemuiについてもっと知っているなら、それが実際に何をするのか、そしてそれを無効にしても安全なら、コメントしてください!

私の投稿も参照してください: com.android.systemuiを無効にしても安全ですか?

ここで私はいくつかの答えを得たいと思っています...

于 2015-03-24T10:39:19.687 に答える