首页 > 解决方案 > 是否可以忽略插入的耳机并仍然使用手机扬声器?

问题描述

我想在插入耳机时使用电话扬声器,而不是耳机扬声器。 在此处输入图像描述

有可能这样做吗?如果是,我该如何实现?
我正在为Android 9开发 Java 应用程序。
到目前为止,检测耳机是否已插入工作:

public class HeadsetIntentReceiver extends BroadcastReceiver {
private String TAG = "HeadSet";

public HeadsetIntentReceiver() {
    Log.d(TAG, "Created");
}

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
        int state = intent.getIntExtra("state", -1);
        switch(state) {
            case(0):
                Log.d(TAG, "Headset unplugged");
                break;
            case(1):
                Log.d(TAG, "Headset plugged");
                break;
            default:
                Log.d(TAG, "Error");
        }
    }
}
}

编辑:
我尝试了以下解决方案,但没有任何反应:

  1. 如何使耳机中的音频静音但让它以编程方式在扬声器上播放?
  2. 如何在 Java 中以编程方式禁用有线耳机

    提前感谢您提供任何有用的建议。


(请不要回答“拔下耳机”)

标签: javaandroidaudioandroid-audiomanagerheadset

解决方案


我认为您正在寻找AudioManager

附加AUDIO_SERVICE到 AudioManager,将 AudioManager 设置为MODE_IN_COMMUNICATION,然后打开免提电话。您可以像在打电话一样使用扬声器。

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);

使用后记得恢复。 例如,

protected void onPause() {
    super.onPause();
    audioManager.setMode(AudioManager.MODE_NORMAL);
    audioManager.setSpeakerphoneOn(false);
}

推荐阅读