在實現一個需要監聽耳機插入的功能時,遇到一個問題:耳機插入一半的時候就收到了耳機插入的廣播,而當耳機完全插入時,卻收到耳機拔出的廣播,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");
......
}
}
以上,僅供備忘,如有錯誤,歡迎大家指摘!