是否可以忽略插入耳机而仍然使用手机扬声器?

时间:2019-12-05 08:17:11

标签: java android audio android-audiomanager headset

我想在插入耳机时使用电话扬声器,而不要使用“耳机扬声器”。 enter image description here

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

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. How to mute audio in headset but let it play on speaker programmatically?
  2. How to disable the wired headset programmatically in Java

    在此先感谢您提供任何有用的建议。


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

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找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);
}