我正在开发一个使用音频焦点功能来播放 TextToSpeech 的应用程序。
正常场景 - 播放音乐 -> 开始 TTS -> TTS 获得瞬时焦点 -> 完成 -> 音乐播放获得焦点。
错误场景 - 播放音乐 -> 启动 TTS -> TTS 获得瞬时焦点 -> 已接电话 -> TTS 焦点被放弃 -> 通话结束 -> 媒体播放器和 TTS 都获得焦点以高音量播放。
有没有其他方法来处理这种情况
下面是焦点监听器代码
am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
和
回调方法
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
Log.d("READOUT", "Focus AUDIOFOCUS_LOSS_TRANSIENT " + getTTS().isSpeaking() + "SDK version = " + Build.VERSION.SDK_INT);
if (getTTS().isSpeaking()) {
startReadout = true;
stopReading();
}
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN || focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) {
Log.d("READOUT", "Focus Gain "+ focusChange);
listnerTTSCallbacks.resumeTTS();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
Log.e("READOUT", "Focus AUDIOFOCUS_LOSS");
stopReading();
}