4
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int action = event.getAction();
    int keyCode = event.getKeyCode();
        switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            if (action == KeyEvent.ACTION_UP) {
                //TODO
            }
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_DOWN) {
                //TODO
            }
            return true;
        default:
            return super.dispatchKeyEvent(event);
        }
    }

このコードは、画面がオンのときに機能します。ただし、画面がロックされている場合は除きます。画面がロックされているときに音量キー イベントを取得する方法はありますか?

4

1 に答える 1

3

このイベントは、画面がオンのときにのみトリガーされます。それ以外の場合は、root 権限が必要です。

BroadcastReceiver 拡張クラスを作成する

 public class YourBoardcastReceiver extends BroadcastReceiver {
                @Override
                public void onReceive(Context context, Intent intent) {


Log.e("get something", "i dont know what!!");

        String intentAction = intent.getAction();
        KeyEvent event = null;
        if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
            event = (KeyEvent) intent
                    .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        }

        if (event == null) {
            return;
        }

        int keycode = event.getKeyCode();
        int action = event.getAction();
        long eventtime = event.getEventTime();

        if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
                || keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
            if (action == KeyEvent.ACTION_DOWN) {
                // Start your app here!

                // ...
                Log.e("event/////", "Trigerd");

                if (isOrderedBroadcast()) {
                    abortBroadcast();
                }
            }
        }
    }
                }
        }

そしてあなたのマニフェストで:

<receiver android:name="YourBoardcastReceiver">
                <intent-filter>
                        <action android:name="android.intent.action.SCREEN_ON" />
                </intent-filter>
</receiver>

このように呼び出します。

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder = new ComponentName(getPackageName(),
            YourBoardcastReceiver.class.getName());
于 2013-04-23T10:14:09.110 に答える