检查耳机是否在不同的API级别上连接

Sas*_*ota 11 java android android-audiomanager

我有一个针对API Level 19+的应用程序.我需要检查耳机是否已连接(有线或蓝牙).

我看到AudioManager.isWiredHeadsetOn()从API级别16开始不推荐使用,并且文档提供使用AudioManager.getDevices()仅从API级别23开始引入.

问题:检查耳机是否已连接到API级别16 - 22的正确方法是什么?

注意:我知道我仍然可以使用已弃用的方法,但我不想这样做.如果他们弃用它,他们应该引入替代API(我找不到).

小智 1

由于 AndroidStudio 警告 AudioManager.getDevices 需要 VersionCode M,因此最好的方法是进行版本检查,如下所示:

    // ... some code
    boolean isWiredHeadsetOn=false;
    AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    Log.d(TAG, "onCreate:::: retrieved AudioManager instance");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Log.d(TAG, "onCreate:::: BuildVersion>=M");
        AudioDeviceInfo[] mAudioDeviceInfos = mAudioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
        Log.d(TAG, "onCreate:::: got AudioDeviceInfo[]");
        for (int i = 0; i < mAudioDeviceInfos.length; i++) {
            if (mAudioDeviceInfos[i].getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET) {
                Log.d(TAG, "onCreate:::: \n\nfind wiredHeadset!!!\n\n");
                isWiredHeadsetOn=true;
            } else {
                Log.d(TAG, "onCreate:::: find device type: " + mAudioDeviceInfos[i].getType() + ", id: " + mAudioDeviceInfos[i].getProductName());
            }
        }
    } else {
        Log.d(TAG, "onCreate:::: BuildVersion<M");
        isWiredHeadsetOn=mAudioManager.isWiredHeadsetOn();
    }
    // ... continue code
Run Code Online (Sandbox Code Playgroud)

希望我能帮忙。最好的问候,Cs