按键监听:
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);