如何获得音量键事件当屏幕被锁定?音量、如何获得、屏幕、事件

2023-09-04 12:33:24 作者:ゞ 斑驳的流年、无法释怀

  @覆盖
公共布尔dispatchKeyEvent(KeyEvent的事件){
    INT行动= event.getAction();
    INT键code = event.getKey code();
        开关(钥匙code){
        案例KeyEvent.KEY code_VOLUME_UP:
            如果(动作== KeyEvent.ACTION_UP){
                //去做
            }
            返回true;
        案例KeyEvent.KEY code_VOLUME_DOWN:
            如果(动作== KeyEvent.ACTION_DOWN){
                //去做
            }
            返回true;
        默认:
            返回super.dispatchKeyEvent(事件);
        }
    }
 

这code在工作时屏幕上。但不是当屏幕被锁定。有没有办法让当屏幕被锁定音量键事件?

解决方案

的事件仅触发时,屏幕on..other明智的root权限是必要的。

  

请一个BroadcastReceiver扩展分类

 公共类YourBoardcastReceiver扩展的BroadcastReceiver {
                @覆盖
                公共无效的onReceive(上下文的背景下,意图意图){


Log.e(得到的东西,我不知道是什么!);

        串intentAction = intent.getAction();
        KeyEvent的事件= NULL;
        如果(Intent.ACTION_MEDIA_BUTTON.equals(intentAction)){
            事件=(KeyEvent的)意图
                    .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        }

        如果(事件== NULL){
            返回;
        }

        INT键code = event.getKey code();
        INT行动= event.getAction();
        长eventtime = event.getEventTime();

        如果(键code == KeyEvent.KEY code_MEDIA_PLAY_PAUSE
                ||关键code == KeyEvent.KEY code_HEADSETHOOK){
            如果(动作== KeyEvent.ACTION_DOWN){
                //此处开始您的应用程序!

                // ...
                Log.e(事件/////,Trigerd);

                如果(isOrderedBroadcast()){
                    abortBroadcast();
                }
            }
        }
    }
                }
        }
 
手机老师出现这个铃声音量的提示我没有按音量键....也没按振动....总是出现...大神们告...我的手机肿么了

  

而在你的清单:

 <接收器的Andr​​oid版本:NAME =YourBoardcastReceiver>
                <意向滤光器>
                        <作用机器人:名称=android.intent.action.SCREEN_ON/>
                &所述; /意图滤光器>
< /接收器>
 

  

和调用它。

  mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder =新的组件名(getPackageName()
            YourBoardcastReceiver.class.getName());
 

@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);
        }
    }

This code is working when screen is on. But not when screen is locked. Is there a way to get the volume key event when the screen is locked?

解决方案

The event only trigger when the screen is on..other wise root permission is needed.

Make a BroadcastReceiver extended class

 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();
                }
            }
        }
    }
                }
        }

And in your Manifest :

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

and Call it like this.

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder = new ComponentName(getPackageName(),
            YourBoardcastReceiver.class.getName());

 
精彩推荐
图片推荐