我已经在我的应用程序中实现了TTS(文字转语音)功能。一切工作正常,现在我遇到了一个无法解决的问题。
基本上,我会在激活TTS功能之前获得Audio Focus。在实际的应用程序中,当我这样做时音乐就停止了(这正是我希望其表现的方式)。但是,一旦完成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。
答案 0 :(得分:1)
完成TTS功能后,我将放弃音频焦点,并且音乐/视频不会继续播放。
由于您无限期地请求音频焦点(AUDIOFOCUS_GAIN
),因此您描述的行为听起来像the expected behavior:
[i] t假定现在正在使用另一个应用程序来收听音频,并且您的应用程序应该有效地自我终止。实际上,这意味着停止播放,删除媒体按钮侦听器(允许新的音频播放器专门处理这些事件)并放弃音频焦点。此时,您希望在恢复播放音频之前需要执行用户操作(按应用程序中的播放)。
在我看来,您应该请求暂时的音频焦点,即AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
(或AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_CAN_DUCK
,具体取决于您是否认为其他音频在较低的背景中继续播放是可以的音量)。