如何让 Android MediaPlayer 在 onPrepared 后不播放?
How can I ask Android MediaPlayer not to play after onPrepared?
我正在开发一个 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
遇到这种情况有什么解决办法吗?
感谢@VladyslavMatviienko 的评论,我怀疑我在其他地方做错了什么,他是对的。根据Android MediaPlayer document:
可以保持 Prepared
状态,但无法调用任何方法,即 pause()
,这是我的错。在 Prepared
状态下你只能调用 start()
, seekTo()
或 stop()
.
希望这个答案对以后可能遇到这个问题的人有用。
我正在开发一个 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
遇到这种情况有什么解决办法吗?
感谢@VladyslavMatviienko 的评论,我怀疑我在其他地方做错了什么,他是对的。根据Android MediaPlayer document:
可以保持 Prepared
状态,但无法调用任何方法,即 pause()
,这是我的错。在 Prepared
状态下你只能调用 start()
, seekTo()
或 stop()
.
希望这个答案对以后可能遇到这个问题的人有用。