如何获得音量键事件当屏幕被锁定? [英] How to get volume key event when the screen is locked?

查看:131
本文介绍了如何获得音量键事件当屏幕被锁定?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @覆盖
公共布尔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());

这篇关于如何获得音量键事件当屏幕被锁定?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆