最近开发android程序,想捕获ACTION_HEADSET_PLUG广播来判断耳麦拔插事件,于是写了一个注册方法:
private HeadsetPlugReceiver registerHeadsetPlugReceiver(Context ctx){
HeadsetPlugReceiver headsetPlugReceiver = new HeadsetPlugReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);
intentFilter.addAction(Intent.ACTION_MEDIA_BUTTON);
intentFilter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
intentFilter.setPriority(Integer.MAX_VALUE);
ctx.registerReceiver(headsetPlugReceiver, intentFilter);
return headsetPlugReceiver;
}
处理方法:
public class HeadsetPlugReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction() == Intent.ACTION_HEADSET_PLUG){
if (intent.hasExtra("state")){
if (intent.getIntExtra("state", 0) == 0){
// 未接入耳麦设备
if(CSwiperController.m_cswiperControllerState != CSwiperControllerState.STATE_IDLE){
SendMessage(MSG_ONINTERRUPTED,null);
}
if (CSwiperController.m_isDetectDeviceChange) {
CSwiperController.m_listener.onDeviceUnplugged();
}
// 终止所有任务,但线程不退出
CSwiperController.StopAllWork(); // 终止所有作业
} else{
// 接入耳麦设备
if (CSwiperController.m_isDetectDeviceChange) {
CSwiperController.m_listener.onDevicePlugged();
}
}
}
// }else if(AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())){
// if(isDevicePresent()){
// Log.w("Plugin","设备存在");
// }else{
// Log.w("Plugin","设备不存在");
// }
// Log.w("Plugin","设备变更...");
}else if(intent.getAction() == Intent.ACTION_MEDIA_BUTTON){
abortBroadcast();
}else{
;
}
} //onReceive
}// class
AndroidManifest.xml :
<receiver android:name="HeadsetPlugReceiver">
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG"></action>
<action android:name="android.intent.action.MEDIA_BUTTON"></action>