android WebView 通过耳机或蓝牙播放音频

android WebView play audio through earpiece or Bluetooth

我正在使用 peer.js 和 WebView 开发语音通话应用。我的意图是通过听筒或蓝牙耳机(如果已连接)播放远程流。并且还应该有一个切换到扬声器的选项。我尝试了以下代码,但音频仍然来自扬声器。

   private fun setupAudio() {
        val am = getSystemService(AUDIO_SERVICE) as AudioManager
        am.mode = AudioManager.MODE_IN_CALL
        am.isSpeakerphoneOn = false
    }

有更好的方法吗?或者我可以更改 WebView 的 AudioStreamType(就像在 MediaPlayer 中一样)吗?

确保在清单权限中添加 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

如果这不能解决问题,请尝试

Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
// First 1 == FOR_MEDIA, second 1 == FORCE_SPEAKER. To go back to the default
// behavior, use FORCE_NONE (0).
setForceUse.invoke(null, 1, 1);

我成功了,诀窍是在收到流后调用 am.isSpeakerphoneOn = false