如何在 android 中设置默认模式耳机

How to set default mode headset in android

我正在开发 VoIP 应用程序,当用户拔下耳机然后设备自动切换到扬声器时出现问题,但我希望设备切换到普通扬声器。有什么办法可以把它改成普通喇叭吗?

要以编程方式打开听筒,试试这个:

audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

private void useEarpiece() {
    audioManager.setMode(AudioManager.MODE_IN_CALL);
    audioManager.setSpeakerphoneOn(false);
}

检查您的权限:

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

捕捉事件:

private class HeadSetReceiver extends BroadcastReceiver {
    @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:
                // Headset unplugged
                break;
            case 1:
                // Headset plugged in
                break;
            }
        }
    }
}

棘手的东西,尤其是多台设备,不同的场景。
我曾开发过一个 VoIP 应用程序,这就是我所知道的。您面临的可能是因为在请求焦点后正在手动处理音频管理器模式和/或流。您需要做的是将控制权转移到呼叫流,以便在您的呼叫开启时,
o.s.

自动处理耳机的连接和断开、传输到 phone 听筒等

您可能正在做所有这些或组合...

使用AudioManager {.setMode(int mode)} - use MODE_IN_COMMUNICATION, recommended for VoIP or MODE_IN_CALL

此外,检查 STREAM_VOICE_CALL

你在用吗 - isSpeakerphoneOn() and setSpeakerphoneOn(boolean) - isBluetoothScoOn(), setBluetoothScoOn(boolean) ?

将需要解决所有这些问题以解决设备或耳机型号的特定问题。

有用的东西:

Even if a SCO connection is established, the following restrictions apply on audio output streams so that they can be routed to SCO headset:

  • the stream type must be STREAM_VOICE_CALL
  • the format must be mono
  • the sampling must be 16kHz or 8kHz