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。
你说得对。那是我的错误。 谢谢! – dantard 2014-10-28 14:11:44