检查耳机是否插好



我似乎找不到一种在android上知道耳机是否插入的方法。我找到了各种解决方案,但它们似乎总是返回false。唯一能正常工作的是BroadcastReceiver,但这不是我需要的:

我只是需要这样的东西

if(headphones plugged in) {
}

有这样的函数吗?它需要一些特殊的权限吗?

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

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

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

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

Android 2.0 +可用

audiomemanager . iswiredheadseton () is DEPRECATED。所以,你需要使用audiomemanager . 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;
    }

audioManager.isWiredHeadsetOn()已被弃用,根据android.media.AudioManager的以下代码

/**
 * Checks whether a wired headset is connected or not.
 * <p>This is not a valid indication that audio playback is
 * actually over the wired headset as audio routing depends on other conditions.
 *
 * @return true if a wired headset is connected.
 *         false if otherwise
 * @deprecated Use {@link AudioManager#getDevices(int)} instead to list available audio devices.
 */
public boolean isWiredHeadsetOn() {
    if (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) {
        return false;
    } else {
        return true;
    }
}
所以我们需要使用AudioManager#getDevices方法,就像下面的
private boolean 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){
            return true;
        }
    }
    return false;
}

最新更新