在onPrepared之后我怎么能要求Android MediaPlayer不播放?

问题描述 投票:0回答:1

我正在开发一个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

针对这种情况的任何解决方案?

android multithreading android-mediaplayer
1个回答
0
投票

感谢@VladyslavMatviienko的评论,我怀疑我在其他地方做错了,他是对的。据Android MediaPlayer document说:

Android MediaPlayer State Diagram

有可能留在Prepared州,但不可能称任何方法,即pause(),这是我的错。在Prepared州你只能叫start()seekTo()stop()

希望这个答案对于那些可能在以后遇到这个问题的人来说非常方便。

© www.soinside.com 2019 - 2024. All rights reserved.