使用AudioManager后,音频流停留在听筒上

时间:2011-09-03 01:00:46

标签: android audio android-audiomanager

在我使用Android AudioManager设置SCO ON和扬声器电话开启后,我将其返回到它开始的位置,然后媒体流将停留在耳机而不是电话扬声器。这是我通过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/

1 个答案:

答案 0 :(得分:1)

好的,我终于解决了这个问题。它不漂亮。我相信AudioManager中存在某种错误。即使在放弃焦点之后,它也会使设备流陷入混乱。除非在放弃焦点之前读取音乐流上的最后一个TTS,否则它将错误地路由流,静音流等。所以,如果在除了音乐流之外的任何流上读取了SMS,我只需要读取一个周期放弃焦点。我还清理了我打电话的订单,并在阅读TTS后修复了一些电话模式等。奇怪的是它似乎运作良好。