Android AudioManager を使用して SCO をオンにし、スピーカーフォンをオンに設定した後、元の場所に戻すと、メディア ストリームは電話のスピーカーではなくイヤホンに留まります。ここで、SCO スピーカーフォンを介してストリームをルーティングするように変更を加えます (すべてうまく機能します)。
if (am2.isBluetoothScoAvailableOffCall()) {
am2.startBluetoothSco();
}
if(!am2.isSpeakerphoneOn()){
speakerPhoneWasOn = false;
am2.setSpeakerphoneOn(true);
}
myHash.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
String.valueOf(AudioManager.STREAM_VOICE_CALL));
am2.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
次に、メッセージが読み取られた後にすべて元に戻そうとします (TTS を使用しています)。
if(SMSstream == 1){
if (am2.isBluetoothScoAvailableOffCall()) {
am2.stopBluetoothSco();
}
if(!speakerPhoneWasOn){
am2.setSpeakerphoneOn(false);
}
}
else{
}
am2.setMode(OLD_AUDIO_MODE);
am2.abandonAudioFocus(null);
ただし、再起動するまで、スピーカーではなく電話のイヤホンにとどまります。反対の問題がある投稿をいくつか見ましたが、この問題はありませんでした。私は Android 2.3.4 を搭載した Droid 3 を持っています。
ここでプロジェクト全体とソース コードを確認できます: http://code.google.com/p/a2dpvolume/