android WebView 通过听筒或蓝牙播放音频
Posted
技术标签:
【中文标题】android WebView 通过听筒或蓝牙播放音频【英文标题】:android WebView play audio through earpiece or Bluetooth 【发布时间】:2021-11-18 23:39:58 【问题描述】:我正在使用 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 中一样)?
【问题讨论】:
【参考方案1】:确保在清单权限中添加<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);
【讨论】:
我有这个权限。 试试这个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);
收到此警告:不支持通过反射访问内部 API,并且可能不适用于所有设备或将来
它不工作
收到错误E/AudioSystem-JNI: Command failed for android_media_AudioSystem_setForceUse: -1
【参考方案2】:
我搞定了,诀窍是在收到流后调用am.isSpeakerphoneOn = false
。
【讨论】:
以上是关于android WebView 通过听筒或蓝牙播放音频的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 mediaplayer android 通过耳机播放音频