1

Android で Bluetooth デバイスを使用して Google ナビゲーションを使用すると、問題が発生します。ナビゲーションは、ターンバイターン方式の指示の音声を A2DP ストリーム経由で送信します。Motorola T605 Bluetooth カー キットがあり、HFP と A2DP をサポートしています。私は昔ながらのカーラジオをよく聞いています。このシナリオでは、ライブ A2DP ストリームがラジオの AUX 入力に送信されているため、ターンバイターン方式の案内は聞こえませんが、代わりにラジオを聞いています。私のアプリには、SMS メッセージを読み上げてくれる機能があります。これに使用するストリームを選択できるように設定しました。T605 で専用の別のスピーカーを使用するため、AudioManager.STREAM_VOICE_CALL を使用することをお勧めします。

これを処理するいくつかの方法を調べました。

1) 通知を A2DP ではなく Bluetooth SCO に再ルーティングします。私はこれを行う方法に資金を提供していません。このパスを介して作成した TTS メッセージを送信でき、うまく機能します (アプリに SMS リーダーが組み込まれています)。SCO を有効にしようとしましたが、音声通話ストリームではなく、ターンバイターン方式の指示ストリームが電話の内部スピーカーに移動します。

2) ナビゲーション メッセージをキャプチャし、SCO パスを介してエコー バックします。ただし、ナビゲーション ストリームを傍受またはキャプチャする方法が見つかりません。Google ナビゲーションは、TTS エンジンまたは独自の方法を使用して音声出力を作成しますか? SMS 文字列の場合と同様に、TTS エンジンに簡単に送信して目的の場所にルーティングできるため、テキスト文字列で道順を取得できれば素晴らしいと思います。

ここで私のアプリのソースを見ることができます: http://code.google.com/p/a2dpvolume/

何かご意見は?

4

1 に答える 1

1

残念ながら、ナビゲーションメッセージをBT SCOに再ルーティングすることに関しては、あなたはSOOLだと思います。ナビゲーションアプリがメッセージを再生するためにTTSまたはNOTIFICATIONストリームタイプのいずれかを使用することを期待します。これらのストリームタイプは両方ともMEDIAルーティング戦略に従います(アクティブな音声通話がない場合に少なくとも通常は当てはまるNOTIFICATIONの場合)。

動作は各ベンダーが決定しますが、ほとんどの実装では、MEDIAルーティング戦略に従うストリームは、にルーティングされる進行中の音声通話中を除いて、BTSCOにルーティングされることはありません。 BTSCO。

ルーティングに関してできる最善のことは、ラウドスピーカー、または「A2DP以外のもの」(接続されている場合は有線ヘッドセット、それ以外の場合はラウドスピーカー)にルーティングを強制することです。

これを行う方法は次のとおりです(これがすべての電話で機能することを確認していません):

Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse",
    int.class,
    int.class);
// 1 == FOR_MEDIA, 10 == FORCE_NO_BT_A2DP (FORCE_SPEAKER would be 1).
setForceUse.invoke(null, 1, 10);
于 2012-12-21T14:29:21.717 に答える