我正在尝试确定如何在设备响铃时将非常短的音频流(通知)路由到已经与设备配对的蓝牙耳机。
当我随时播放任何音频时,它都会被路由到蓝牙设备,没问题。但是,如果我在接收到 RINGING 状态的 android.intent.action.PHONE_STATE 时尝试开始播放音频,则音频不会按预期路由。
我可以看到 AudioManager 的 setBluetoothA2dpOn 方法已被弃用,但我实际上尝试过但似乎没有效果。
我试过MediaRouter对象,但可以看到MediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO)在设备响铃时指向蓝牙设备的RouteInfo,AudioManager.isBluetoothA2dpOn为真。
那么,谁能告诉我为什么在响铃的那一刻音频路由是这样的?在这种情况下,有什么方法可以强制将音频路由到蓝牙设备?
[更新] 我今天又试了一次,我发现了可能是问题的原因。我创建了一个 BroadcaseReceiver 来检测 android.intent.action.PHONE_STATE 的变化。如果接收到意图并且状态当前正在响起,请检查 AudioManager 的模式,您会发现它是 MODE_NORMAL。但几秒钟后电话将开始真正响铃,并且模式将更改为 MODE_RINGTONE。尝试使用 setMode(AudioManager.MODE_NORMAL) 方法手动设置模式是无用的,即使将其设置为 MODE_NORMAL,状态仍保持为 MODE_RINGTONE。
现在,我认为问题的原因是在 MODE_RINGTONE 模式下,所有的流都被定向到手机扬声器,这里没有安卓系统提供改变模式的方法。