检查耳机是否已插入

dos*_*214 22 audio android headphones

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

我只需要这样的东西

if(headphones plugged in) {
}
Run Code Online (Sandbox Code Playgroud)

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

Nas*_*kov 37

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

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.isWiredHeadsetOn();
Run Code Online (Sandbox Code Playgroud)

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

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

适用于Android 2.0 +

  • @Phil Stackoverflow不是关于谁将获得学分,而是关于帮助其他人和分享知识.我不在乎评级.随意发布它作为答案,而不是告诉我解决方案,我将ping该线程的所有者接受你的答案. (2认同)

Rav*_*ana 8

使用此代码......

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

  • 不推荐使用来自类型 AudioManager 的方法 isWiredHeadsetOn() (2认同)

val*_*dak 7

AudioManager.isWiredHeadsetOn()已弃用。因此,您需要改用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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 仅从API级别23开始才有效。您知道如何将其用于爱好者API级别(例如19)吗? (2认同)

归档时间:

查看次数:

18394 次

最近记录:

6 年 前