耳机插拔事件的例子网上几乎泛滥了,基本都是说在manifest里面注册广播无法接收到插拔事件广播,必须在java代码中注册广播。
是否在manifest中注册不是本文的重点,重点是,我按照网上的做法没一次是成功的。先分享代码如下:
public class EarPhoneDemoActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_HEADSET_PLUG);
registerReceiver(receiver, filter);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("state:::"+intent.getIntExtra("state", 0));
if(intent.getIntExtra("state", 0) == 2){
System.out.println("in.........");
}else if(intent.getIntExtra("state", 0) == 0){
System.out.println("out.........");
}
}
};
}
网上的所有例子,包括android api,都是说明:0的时候耳机未挂载,1的时候耳机挂载。
我的手机是htc g14的,打印System.out.println("state:::"+intent.getIntExtra("state", 0));结果为:
0 手机未挂载,2 手机挂载。
因此觉得很奇怪,有待更多朋友进行认证。