Audiomanager.abandonAudioFocus不会继续播放

问题描述:

我试图通过文本语音转换系统说出短语时使音频播放器无声。正如预期的那样,音频管理器会在请求音频焦点时减小音量,但在放弃AudioFocus时,音量不会恢复,并且不会调用abandonAudioFocus的回调。 这是我的代码:Audiomanager.abandonAudioFocus不会继续播放

private class SpeakRunnable implements Runnable { 
    String mText; 

    public SpeakRunnable(String text) { 
     mText = text; 
    } 

    @Override 
    public void run() { 
     stream_volume = am.getStreamVolume(AudioManager.STREAM_MUSIC); 
     am.requestAudioFocus(new OnAudioFocusChangeListener() { 
      @Override 
      public void onAudioFocusChange(int focusChange) { 
        //Check if focus granted 
        ..... 
        HashMap<String, String> params = new HashMap<String, String>(); 
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "none"); 
        talker.speak(mText, TextToSpeech.QUEUE_ADD, params); 
      } 
     }, 
     AudioManager.STREAM_MUSIC, 
     AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 

    } 
} 

和:

talker.setOnUtteranceProgressListener(new UtteranceProgressListener() { 

      @Override 
      public void onStart(String utteranceId) { 

      } 

      @Override 
      public void onError(String utteranceId) { 

      } 

      @Override 
      public void onDone(String utteranceId) { 
       am.abandonAudioFocus(new OnAudioFocusChangeListener() {      
        @Override 
        public void onAudioFocusChange(int focusChange) { 
         Log.v(app_id, "CALLBACK"); 
        } 
       }); 
      } 
     }); 

任何想法?提前致谢。

您需要将您传递给requestAudioFocus的相同AudioManager.OnAudioFocusChangeListener传递给abandonAudioFocus。这在the documentation for abandonAudioFocus描述:

public int abandonAudioFocus (AudioManager.OnAudioFocusChangeListener l) 

Parameters 
l the listener with which focus was requested. 

另外,我不认为你应该期望在监听器onAudioFocusChange方法被调用为你放弃音频焦点的结果。当您放弃音频焦点时,其他一些已请求音频焦点的音频焦点客户端将收到已获得焦点的通知。 如果你想了解这是如何在Android内部实现的,你可以看看MediaFocusControl source code

+0

你说得对。那是我的错误。 谢谢! – dantard 2014-10-28 14:11:44