插入耳机时收到的广播与实际状态不符

2017-01-17  本文已影响0人  拉赫曼

在实现一个需要监听耳机插入的功能时,遇到一个问题:耳机插入一半的时候就收到了耳机插入的广播,而当耳机完全插入时,却收到耳机拔出的广播,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");
        ......
    }
}

以上,仅供备忘,如有错误,欢迎大家指摘!

上一篇下一篇

猜你喜欢

热点阅读