Аудио поток остается на наушнике после использования AudioManager - PullRequest
0 голосов
/ 03 сентября 2011

После того, как я использую 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);

Но он остается с динамиком телефона вместо динамика, пока я не перезагружусь.Я видел несколько постов, которые имели противоположную проблему, но ни одного с этой проблемой.У меня есть Droid 3 с Android 2.3.4.

Вы можете увидеть весь проект и исходный код здесь: http://code.google.com/p/a2dpvolume/

1 Ответ

1 голос
/ 04 сентября 2011

ОК, я наконец исправил эту проблему. Это не красиво. Я считаю, что в AudioManager есть какая-то ошибка. Даже после отказа от фокуса потоки устройств останутся в беспорядке. Если только последний TTS не был прочитан поверх музыкального потока непосредственно перед тем, как покинуть фокус, он будет неправильно маршрутизировать потоки, отключать потоки и т. Д. Итак, у меня просто есть чтение одного периода, если SMS было прочитано поверх любого потока, кроме музыкального потока ранее. отказ от фокуса. Я также убрал порядок, в который звонил, и исправил некоторые режимы телефона и т. Д. После прочтения TTS. Странно, похоже, хорошо работает.

...