代码之家  ›  专栏  ›  技术社区  ›  Mohsen Mirhoseini

我怎样才能让Android MediaPlayer在准备就绪后停止播放?

  •  0
  • Mohsen Mirhoseini  · 技术社区  · 7 年前

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

    这种情况有什么解决办法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mohsen Mirhoseini    7 年前

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

    Android MediaPlayer State Diagram

    可以呆在家里 Prepared 状态,但不能调用任何方法,即 pause() 那是我的错。在里面 准备好 说明您只能致电 start() , seekTo() stop() .

    希望这个答案对以后可能面临这个问题的人有用。