Android Audiomanager.AudioFocus不';我不能继续玩了
当文本到语音系统说出一个短语时,我试图使音频播放器静音。audiomanager在请求音频焦点时会按预期减少音量,但在调用放弃AudioFocus时,不会恢复音量,也不会调用放弃AudioFocus的回调。 这是我的代码:Android Audiomanager.AudioFocus不';我不能继续玩了,android,android-mediaplayer,Android,Android Mediaplayer,当文本到语音系统说出一个短语时,我试图使音频播放器静音。audiomanager在请求音频焦点时会按预期减少音量,但在调用放弃AudioFocus时,不会恢复音量,也不会调用放弃AudioFocus的回调。 这是我的代码: private class SpeakRunnable implements Runnable { String mText; public SpeakRunnable(String text) { mText = text; }
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);
}
}
有什么想法吗?提前感谢。您需要将传递给
请求音频焦点
的音频管理器.OnAudioFocusChangeListener
传递给放弃音频焦点
。这在以下章节中进行了描述:
此外,我认为您不应该期望由于放弃音频焦点而调用侦听器中的onAudioFocusChange
方法。当您放弃音频焦点时,已请求音频焦点的其他音频焦点客户端将收到已获得焦点的通知。
如果你想了解这是如何在Android内部实现的,你可以看一下
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");
}
});
}
});
public int abandonAudioFocus (AudioManager.OnAudioFocusChangeListener l)
Parameters
l the listener with which focus was requested.