在实现一个需要监听耳机插入的功能时,遇到一个问题:耳机插入一半的时候就收到了耳机插入的广播,而当耳机完全插入时,却收到耳机拔出的广播,WTF?
先在之前的代码上加上一行Log,打印出
if (action.equals(Intent.ACTION_HEADSET_PLUG)) { // headset has pluged
int state = intent.getIntExtra("state", 0);
Log.d("MLTHead", "state:"+state);
if (state == 1) {
Log.d(TAG, "headset plugged");
......
} else {
Log.d(TAG, "headset unplugged");
......
}
}
编译、运行,先插入一半耳机,此时输出log
01-17 11:13:55.163 8839 8839 D MLTHead : state:1
再将剩下的一半耳机完全插入,输出log
01-17 11:13:57.133 8839 8839 D MLTHead : state:1
01-17 11:13:57.355 8839 8839 D MLTHead : state:0
在剩下的一半插入时,先收到了耳机插入广播,随后立即收到了耳机拔出广播,然而此时耳机却是插入状态=。=
为了保证正确的监听耳机状态,在state = 0时,通过AudioManager的isWiredHeadsetOn()方法来判定耳机实际插入情况,代码如下:
if (action.equals(Intent.ACTION_HEADSET_PLUG)) { // headset has pluged
int state = intent.getIntExtra("state", 0);
Log.d("MLTHead", "state:"+state);
if (state == 1) {
Log.d(TAG, "headset plugged");
......
} else {
if(mAudioManager!= null && mAudioManager.isWiredHeadsetOn()) {
Log.d(TAG, "the headset actually plugged,do nothing.");
return;
}
Log.d(TAG, "headset unplugged");
......
}
}
以上,仅供备忘,如有错误,欢迎大家指摘!
网友评论