首页 > 解决方案 > 放弃音频焦点并继续之前的音乐/视频流

问题描述

我在我的应用程序中实现了 TTS(文本到语音)功能。一切正常,现在我遇到了一个我找不到解决方案的问题。

基本上,我在激活我的 TTS 功能之前获得了音频焦点。在实际应用程序中,当我这样做时音乐停止(这正是我希望它的行为方式)。但是,一旦 TTS 功能完成,我会放弃音频焦点,音乐/视频不会继续。我不知道如何继续在我的 TTS 之前播放的上一个音乐/视频流。

这是我实现的代码:

完成 TTS 后放弃音频焦点的代码:

@Override
public void onUtteranceCompleted(String s) {
    Log.v(TAG, s);
    if(!getUserPreference().getTest()){
        //setDefaultVolume();
        audioManager.abandonAudioFocus(this);
    }
}

在我的 TTS 开始之前获取音频焦点的代码:

audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);

int requestAudioFocusResult = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if(requestAudioFocusResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED){...

我欢迎任何关于我的问题的进一步问题。期待答案/建议。

根据答案更改:

int requestAudioFocusResult = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

我已经按照答案所述实现了,但是 requestAudioFocusResult 值在应该为 3 时返回为 1。知道吗?

标签: javaandroidaudiotext-to-speech

解决方案


一旦 TTS 功能完成,我放弃音频焦点,音乐/视频不会继续。

由于您无限期地请求音频焦点(AUDIOFOCUS_GAIN),您描述的行为听起来像预期的行为

[我]假设现在正在使用另一个应用程序来收听音频,并且您的应用程序应该有效地自行结束。实际上,这意味着停止播放、移除媒体按钮侦听器(允许新的音频播放器专门处理这些事件)并放弃您的音频焦点。那时,您会期望在继续播放音频之前需要用户操作(在您的应用中按下播放)


在我看来,您应该请求临时音频焦点,即AudioManager.AUDIOFOCUS_GAIN_TRANSIENT(或AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_CAN_DUCK取决于您是否认为其他音频可以在后台以较低音量继续播放)。


推荐阅读