美文网首页
插入耳机时收到的广播与实际状态不符

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

作者: 拉赫曼 | 来源:发表于2017-01-17 14:56 被阅读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");
            ......
        }
    }
    

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

    相关文章

      网友评论

          本文标题:插入耳机时收到的广播与实际状态不符

          本文链接:https://www.haomeiwen.com/subject/mrvmbttx.html