我似乎无法找到一种方法来了解Android是否插入耳机。我找到了各种解决方案,但它们似乎总是返回错误。
唯一似乎正常工作的是BroadcastReceiver
,但这不是我需要的:
我只需要这样的东西
if(headphones plugged in) {
}
有这样的功能吗?它需要一些特殊权限吗?
答案 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)
它非常富有提供语境感。
答案 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; }