【发布时间】:2018-03-02 18:51:46
【问题描述】:
我正在开发一个 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
这种情况有什么解决办法吗?
【问题讨论】:
-
after preparation you should play(!)没有。如果您在准备时不开始播放,则不会出现错误。可能是其他原因造成的 -
@VladyslavMatviienko 这正是我想看到的行为!但正如我根据这个答案stackoverflow.com/questions/9008770/… 提到的那样,我总是得到-38 错误!
-
我仍然认为您由于某些其他原因而收到该错误。没人知道你还在用你的媒体播放器做什么。
-
好吧,如果你这么认为,我会写一个简单的应用,只有一个 MediaPlayer 来测试。
-
本地VS在线应该无所谓
标签: android multithreading android-mediaplayer