デバイスが鳴っている間に、デバイスと既にペアリングされている Bluetooth ヘッドフォンに非常に短いオーディオ ストリーム (通知) をルーティングする方法を特定しようとしています。
いつでもオーディオを再生すると、Bluetooth デバイスにルーティングされますが、問題ありません。しかし、android.intent.action.PHONE_STATE を受信したときにオーディオの再生を開始しようとすると、RINGING 状態でオーディオが期待どおりにルーティングされません。
AudioManager の setBluetoothA2dpOn メソッドが非推奨になっていることがわかりますが、実際に試してみましたが効果がないようです。
MediaRouter オブジェクトを試してみましたが、デバイスの呼び出し中に MediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO) が Bluetooth デバイスの RouteInfo を指し、AudioManager.isBluetoothA2dpOn が true であることを確認できます。
では、鳴っている瞬間のオーディオルートがなぜこのようになっているのか、誰か教えてもらえますか? そのような場合にオーディオを強制的に Bluetooth デバイスにルーティングする方法はありますか?
[更新] 今日、もう一度試してみたところ、問題の原因である可能性があることがわかりました。android.intent.action.PHONE_STATE の変更を検出する BroadcaseReceiver を作成しました。インテントが受信され、状態が現在鳴っている場合は、AudioManager のモードを確認すると、MODE_NORMAL であることがわかります。しかし、数秒後に電話が実際に鳴り始め、モードが MODE_RINGTONE に変更されます。メソッド setMode(AudioManager.MODE_NORMAL) を使用して手動でモードを設定しようとしても無駄です。MODE_NORMAL に設定した後でも、状態は MODE_RINGTONE のままです。
今、問題の原因は、MODE_RINGTONEモードでは、すべてのストリームが電話スピーカーに向けられており、Androidシステムからモードを変更する方法が提供されていないことだと思います。