如何解决闪避后声音没有恢复正常
我正在通过我的应用播放声音,并尝试遵循让系统在播放我的声音时避开其当前声音的准则。虽然它似乎并不总是有效。一些用户报告说他们的音乐在闪避后没有出现。关于原因的任何想法?
我已尽力遵循本指南https://developer.android.com/guide/topics/media-apps/audio-focus?authuser=2
这是我在 android 10+ 上的实现:
playSound 对应用程序的其余部分公开
fun playDing() {
val mediaPlayer = MediaPlayer.create(context,R.raw.sound_ding)
requestPlaySoundAndroid10(mediaPlayer)
}
这里是 requestSound。它向返回响应的系统发送焦点请求。根据响应,我播放或关闭声音。我主要播放声音并隐藏音频,因此请求似乎有效。
private fun requestPlaySoundAndroid10(mediaPlayer: MediaPlayer) {
val audioAttributes = AudioAttributes.Builder().let {
it.setUsage(AudioAttributes.USAGE_NOTIFICATION)
it.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
it.build()
}
val afRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK).let { request ->
request.setFocusGain(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
request.setAudioAttributes(audioAttributes)
request.setAcceptsDelayedFocusGain(true)
request.setOnAudioFocusChangeListener { }
request.build()
}
val response = audioManager.requestAudioFocus(afRequest)
when(response){
AudioManager.AUDIOFOCUS_REQUEST_GRANTED -> playSound(mediaPlayer,afRequest)
else -> closeSound(mediaPlayer,afRequest)
}
}
然后播放声音()。它设置媒体播放器并启动声音
private fun playSound(mediaPlayer: MediaPlayer,request: AudioFocusRequest){
mediaPlayer.setOnCompletionListener {
closeSound(mediaPlayer,request)
}
mediaPlayer.start()
}
和 closeSound()。当声音播放完毕时,我释放资源并放弃请求。系统应该重新打开音乐,但没有。
private fun closeSound(mediaPlayer: MediaPlayer,audioFocusRequest: AudioFocusRequest){
audioManager.abandonAudioFocusRequest(audioFocusRequest)
mediaPlayer.release()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。