Android 检查耳机是否已插入
我似乎找不到办法在android上知道耳机是否插好了。我找到了各种各样的解决方案,但它们似乎总是返回错误。 唯一能正常工作的是Android 检查耳机是否已插入,android,audio,headphones,Android,Audio,Headphones,我似乎找不到办法在android上知道耳机是否插好了。我找到了各种各样的解决方案,但它们似乎总是返回错误。 唯一能正常工作的是广播接收器,但这不是我需要的: 我只需要这样的东西 if(headphones plugged in) { } 有这样的功能吗?它需要一些特殊权限吗?您可以使用此代码检查耳机是否已插入 AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); audioManag
广播接收器
,但这不是我需要的:
我只需要这样的东西
if(headphones plugged in) {
}
有这样的功能吗?它需要一些特殊权限吗?您可以使用此代码检查耳机是否已插入
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.isWiredHeadsetOn();
(不用担心会遭到反对,它仍然只用于检查耳机是否已插入。)
你需要
在Android 2.0+中可用。使用此代码
AudioManager am1 = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
Log.i("WiredHeadsetOn = ", am1.isWiredHeadsetOn()+"");
Log.i("MusicActive = ", am1.isMusicActive()+"");
Log.i("SpeakerphoneOn = ", am1.isSpeakerphoneOn()+"");
AudioManager.isWiredHeadsetOn()已被弃用。 因此,您需要使用以下方法:
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;
}
}
许可。这就是为什么我第一次尝试这个解决方案时它没有起作用。有没有一种方法可以在不涉及上下文的情况下做到这一点?@dosse91214权限有什么问题?如果不添加权限,isWiredHeadsetOn()将始终返回false。是的,这就是我的意思。我第一次尝试这个解决方案时,它没有提到我必须添加权限。谢谢:DGreat除了这个方法在API 14中被弃用外-@Phil Stackoverflow不是关于谁将获得积分,而是关于帮助他人和分享知识。我不在乎评级。请随意将其作为答案发布,而不是告诉我解决方案,我将ping此线程的所有者以接受您的答案。AudioManager类型中的方法isWiredHeadsetOn()不受欢迎。此方法仅从API级别23开始工作。你知道如何将它用于LoverAPI级别吗,比如说19?干净,就行了。谢谢,欢迎来到SO!只有代码的答案是无用的,即使是正确的。试着解释一下你所附的东西
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;
}