我正在开发一个Android应用程序,该应用程序在后台执行大量的并发和RxJava处理,并且由于某种原因,可能不想播放处于异步准备阶段的音乐:
player.prepareAsync()
和
override fun onPrepared(mp: MediaPlayer?) {
isPreparing = false
if (playAfterPreparing) {
//start playback
mp?.start()
} else {
// don't play and keep it prepare for later!!!
}
updateNotification()
}
但问题是在准备之后你应该玩(!)因为: Media Player called in state 0, error (-38,0)
我甚至试图在准备中一个接一个地开始和停顿:
override fun onPrepared(mp: MediaPlayer?) {
Timber.i("onPrepared")
Timber.i("playAfterPreparing: $playAfterPreparing")
isPreparing = false
//start playback
mp?.start()
if (!playAfterPreparing) {
mp?.pause()
}
updateNotification()
}
但它不起作用导致它呈现出同样的问题。
我也知道MediaPlayer状态机是如何工作的,但在文档中没有看到这种情况: https://developer.android.com/reference/android/media/MediaPlayer.html
针对这种情况的任何解决方案?
答案 0 :(得分:0)
感谢@VladyslavMatviienko的评论,我怀疑我在其他地方做错了,他是对的。根据{{3}}:
可以保持Prepared
状态,但不能调用任何方法pause()
,这是我的错。在Prepared
州,您只能拨打start()
,seekTo()
或stop()
。
希望这个答案对于那些可能在以后遇到这个问题的人来说很方便。