检查耳机是否已插入

时间:2013-05-06 08:44:38

标签: android audio headphones

我似乎无法找到一种方法来了解Android是否插入耳机。我找到了各种解决方案,但它们似乎总是返回错误。 唯一似乎正常工作的是BroadcastReceiver,但这不是我需要的:

我只需要这样的东西

if(headphones plugged in) {
}

有这样的功能吗?它需要一些特殊权限吗?

5 个答案:

答案 0 :(得分:34)

您可以使用此代码检查耳机是否已插入

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.isWiredHeadsetOn();

(不要担心弃用,它仍可用于检查耳机是否已插入。)

你需要 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

适用于Android 2.0 +

答案 1 :(得分:8)

使用此代码...

AudioManager am1 = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
Log.i("WiredHeadsetOn = ", am1.isWiredHeadsetOn()+"");
Log.i("MusicActive = ", am1.isMusicActive()+"");
Log.i("SpeakerphoneOn = ", am1.isSpeakerphoneOn()+"");

答案 2 :(得分:5)

AudioManager.isWiredHeadsetOn() DEPRECATED 。 因此,您需要使用AudioManager.getDevices()方法:

private boolean isHeadphonesPlugged(){
        AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        AudioDeviceInfo[] audioDevices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);
        for(AudioDeviceInfo deviceInfo : audioDevices){
            if(deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADPHONES
                    || deviceInfo.getType()==AudioDeviceInfo.TYPE_WIRED_HEADSET){
                return true;
            }
        }
        return false;
    }

答案 3 :(得分:0)

使用 Google Awareness API

它非常富有提供语境感。

答案 4 :(得分:-1)

audioManager.isWiredHeadsetOn()已根据android.media.AudioManager中的以下代码弃用 / **      *检查是否已连接有线耳机。      *

这不是有效的音频播放指示      *实际上是通过有线耳机,因为音频路由取决于其他条件。      *      * @return如果连接了有线耳机,则为true。      *否则为false      * @不建议使用{@link AudioManager#getDevices(int)}来列出可用的音频设备。      * /     公共布尔isWiredHeadsetOn(){         如果(AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADSET,“”)                 == AudioSystem.DEVICE_STATE_UNAVAILABLE &&             AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADPHONE,“”)                 == AudioSystem.DEVICE_STATE_UNAVAILABLE &&             AudioSystem.getDeviceConnectionState(DEVICE_OUT_USB_HEADSET,“”)               == AudioSystem.DEVICE_STATE_UNAVAILABLE){             返回false;         }其他{             返回true;         }     }

所以我们需要使用如下的AudioManager#getDevices方法

私有布尔isWiredHeadsetOn(){         AudioManager audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);         AudioDeviceInfo [] audioDevices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL);         for(AudioDeviceInfo deviceInfo:audioDevices){             if(deviceInfo.getType()== AudioDeviceInfo.TYPE_WIRED_HEADPHONES                     || deviceInfo.getType()== AudioDeviceInfo.TYPE_WIRED_HEADSET){                 返回true;             }         }         返回false;     }