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

Java 如何在android中设置默认模式耳机,java,android,voip,Java,Android,Voip,我正在开发一个VoIP应用程序,当用户拔下耳机时,设备会自动切换到扬声器,但我希望设备切换到普通扬声器。有什么方法可以将其更改为普通扬声器吗?要以编程方式打开耳机,请尝试以下操作: audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); private void useEarpiece() { audioManager.setMode(AudioManager.MODE_IN_CALL); a

我正在开发一个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" />

棘手的事情,特别是多个设备、不同的场景。
我曾开发过一款VoIP应用程序,这就是我了解这一点的原因。您所面临的问题可能是因为音频管理器模式和/或流在请求焦点后被手动处理。您需要做的是将控制权转移到呼叫流,以便在呼叫打开时,
o.s.会自动处理耳机的连接和断开、传输到手机听筒等

你可能正在做这一切或是一个组合

使用{}-使用,建议用于VoIP或

还有,检查一下

你在用吗 -及 -

对于设备或耳机型号的特定问题,需要与所有这些问题进行讨论

有用的东西:

即使建立了SCO连接,以下限制 应用于音频输出流,以便它们可以路由到SCO 耳机:

  • 流类型必须是流\语音\呼叫
  • 格式必须是mono
  • 采样频率必须为16kHz或8kHz

我试过了,但当我切换到普通扬声器时,在切换到普通扬声器之前,它将保持在扬声器中约1.5秒,这兄弟!谢谢你的帮助,但我有一个问题,在切换到正常扬声器之前,它将保持在扬声器中大约1.5秒。在通话时,你的应用程序处于什么音频模式?我认为模式通话是因为这个使用Cordova的应用程序通过人行横道在webview中打电话,所以我不知道为什么切换到正常扬声器时会延迟此行为设备/操作特定于或与其他设备一起发生你的应用程序只能在多个设备上运行/o.s.这只发生在Android操作系统中
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;
            }
        }
    }
}