5

AudioTrack通过耳机进行流式传输。我必须只SoundPool向内置扬声器发送一个,而不会中断AudioTrack耳机的播放。有黑帮大佬吗?

4

1 回答 1

11

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

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

编辑:我现在测试了 setForceUse 方法,当有线耳机连接在实际设备上时,将媒体流强制传输到扬声器,它确实有效(尽管我不能保证它可以在所有设备上工作)。实现与我上面描述的略有不同。有关我使用的代码,请参阅我对如何在 android 4.0 中以编程方式打开/关闭扬声器的回答。

于 2012-08-18T12:58:52.437 回答