5

いくつかのアクションをカメラボタンにバインドしようとしました:

videoPreview.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
            switch(keyCode) {
                case KeyEvent.KEYCODE_CAMERA:
                    //videoPreview.onCapture(settings);
                    onCaptureButton();
...
            }
        }
        return false;
    }
});

ただし、ボタンを押すと、元のCameraアプリケーションが起動するため、アプリケーションがクラッシュします。

カメラボタンが押されたときにカメラアプリケーションが起動しないようにする方法を知っている人はいますか?

4

4 に答える 4

6

あなたの例trueでは、イベントを「消費」したことを知らせるために戻る必要があります。このような:

videoPreview.setOnKeyListener(new OnKeyListener(){
    public boolean onKey(View v, int keyCode, KeyEvent event){
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
            switch(keyCode) {
                case KeyEvent.KEYCODE_CAMERA:
                    //videoPreview.onCapture(settings);
                    onCaptureButton();
                    /* ... */
                    return true;
            }
        }
        return false;
    }
});

また、videoPreview(または子要素) にフォーカスがある場合にのみ機能します。したがって、デフォルトでフォーカスがあるように設定できます。

@Override
public void onResume() {
    /* ... */
    videoPreview.requestFocus();
    super.onResume();
}

または (推奨) リスナーを最上位の要素 (例: a 、 など) に配置しLinearLayoutますRelativeLayout

于 2009-06-13T01:34:43.587 に答える
4

カメラ ボタンが押されるとすぐに、ブロードキャスト メッセージが、それをリッスンしているすべてのアプリケーションに送信されます。ブロードキャスト レシーバーと abortBroadcast() 関数を使用する必要があります。これに関する詳細については、以下のリンクを参照してください。

http://suhassiddarth.blogspot.com/

于 2010-12-07T17:43:08.930 に答える
3

カメラ ボタンを無効にする (またはクリックに反応する) 簡単な方法は、アクティビティに以下を追加することです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_CAMERA) {
        return true; // do nothing on camera button
    }
    return super.onKeyDown(keyCode, event);
}
于 2010-03-29T16:30:02.863 に答える
2

trueケースKeyEvent.KEYCODE_CAMERAブランチに戻るのを忘れました。true を返すと、キー イベントを消費したことが Android に通知され、カメラ アプリケーションは起動されません。常に false を返すことで、すべてのキー イベントがデフォルト ハンドラに渡されます。

于 2009-06-12T23:41:03.017 に答える