android - 连接耳机时在扬声器中播放声音

标签 android bluetooth headset headphones

如何在连接耳机蓝牙耳机时在扬声器中播放声音?

我试过下面的代码,还是一样:

AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);

最佳答案

许多 Android 设备在 AudioFlinger/音频 HAL 中使用单一输出线程 进行所有本地播放(听筒、扬声器、有线耳麦/头戴式耳机),使得不可能同时对两个音轨进行不同的路由(这是为什么在许多设备上,如果播放通知并且您连接了有线耳机,媒体流会被强制静音;否则您会在播放通知时听到扬声器中的音乐。

在某些设备上,如果您设法执行 setForceUse(FOR_MEDIA, FORCE_SPEAKER) 并将 MUSIC 流类型用于您想在扬声器中播放的内容,并且使用 VOICE_CALL您想要在有线耳机中播放的内容的流类型。 我不确定应用程序是否有任何方法可以执行该 setForceUse 调用。也许您可以通过反射获取 AudioService 类的 handleMessage 方法并向其发送 MSG_SET_FORCE_USE 消息。我自己从未尝试过,所以它可能会失败。

编辑:我现在已经测试了 setForceUse 方法,当有线耳机连接到实际设备上时强制媒体流到扬声器,它确实有效(尽管我不能保证它适用于所有设备) .实现与我上面描述的略有不同。请参阅我对以下链接使用的代码的回答。

how to turn speaker on/off programmatically in android 4.0

希望对你有帮助。

关于android - 连接耳机时在扬声器中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48162351/

相关文章:

android - 如何将耳机中的音频静音但让它以编程方式在扬声器上播放?

java - Android Intent B 不返回到 Intent A 的下一行?

android - Mongoose 和 Android Volley

android - 蓝牙查找设备落下程序

linux - DBus-monitor 用于观察蓝牙事件

android - 在 Android 2.2 中处理耳机和蓝牙 AVRC 传输控制的任何指南

java - 使用谷歌地图获取 Activity 和 fragment 之间的数据

javascript - 如何从虚拟专用服务器检索文本文件?

android - 在外部 android 应用程序中读取蓝牙消息

android - 在 Android 中,如何在有线耳机和 A2DP BT 耳机之间切换?