0

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/

4

1 に答える 1

1

OK、私はついにこの問題を修正しました。そのきれいではありません。私が信じているAudioManagerにはある種のバグがあります。フォーカスを放棄した後でも、デバイスストリームが混乱したままになります。フォーカスを放棄する直前に最後のTTSが音楽ストリームで読み取られない限り、ストリームが間違ってルーティングされたり、ストリームがミュートされたりします。したがって、SMSが以前に音楽ストリーム以外のストリームで読み取られた場合は、1つの期間だけ読み取られます。焦点を放棄します。また、TTSを読んだ後、電話をかけた順番を整理し、電話モードなどを修正しました。不思議なことに、それはうまく機能しているようです。

于 2011-09-04T04:19:18.500 に答える