Android 耳机按键与拔插监听

来源:互联网 发布:网络方案的初步设计 编辑:程序博客网 时间:2024/06/02 08:12

按键监听:

public class MyMediaButtonReceiver extends BroadcastReceiver{    private AudioManager mAudioManger;    @Override    public void onReceive(Context context, Intent intent) {        String intentAction = intent.getAction();        if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intentAction)) {//拔出耳机,将声音设为最大声音的1/3            mAudioManger = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);            int max = mAudioManger.getStreamMaxVolume(AudioManager.STREAM_MUSIC);            mAudioManger.setStreamVolume(AudioManager.STREAM_MUSIC,                    max/3,                    AudioManager.FLAG_PLAY_SOUND|AudioManager.FLAG_SHOW_UI);        }        else if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {            KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);            if (event == null) {                return;            }            int keycode = event.getKeyCode();            if(event.getAction()==KeyEvent.ACTION_DOWN){//只监听抬起事件                abortBroadcast();                return;            }            switch (keycode) {                case KeyEvent.KEYCODE_MEDIA_STOP:                    break;                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:                case KeyEvent.KEYCODE_HEADSETHOOK:                    break;                case KeyEvent.KEYCODE_MEDIA_NEXT:                    break;                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:                    break;                case KeyEvent.KEYCODE_MEDIA_PAUSE:                    }                    break;                case KeyEvent.KEYCODE_MEDIA_PLAY:                    break;            }        abortBroadcast();        }    }}

在manifest中注册广播接受器

 <receiver android:name=".tools.MyMediaButtonReceiver"             android:exported="true"            >            <intent-filter android:priority="1000">                <action android:name="android.media.AUDIO_BECOMING_NOISY"/>                <action android:name="android.intent.action.MEDIA_BUTTON" />            </intent-filter>        </receiver>

最后在service中向AudioManger中注册此广播,否则不会收到广播

 mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);        //构造一个ComponentName,指向MediaoButtonReceiver类          mbCN = new ComponentName(getPackageName(),MyMediaButtonReceiver.class.getName());        //注册一个MedioButtonReceiver广播监听          mAudioManager.registerMediaButtonEventReceiver(mbCN);

耳机插入监听:必须是动态注册,否则收不到广播

IntentFilter filter = new IntentFilter();        filter.addAction(Intent.ACTION_HEADSET_PLUG);        registerReceiver(mBroadcast,filter);
0 0
原创粉丝点击