MediaPlayer当前位置超过了总持续时间

时间:2019-01-25 20:08:27

标签: android kotlin android-mediaplayer

我正在更新SeekBar以反映mp3播放的当前位置。问题是当我结束时,当前时间超过总时间5-20秒。这是相关的代码。

        mViewModel?.getDuration()?.observe(viewLifecycleOwner, Observer {
        Log.d(TAG, it.toString())
        mBinding?.playerContainer?.totalDuration?.text = msToTime(it)
        mBinding?.playerContainer?.currentPosition?.text = msToTime(mViewModel?.mAudioManager?.mediaPlayer?.currentPosition)
    })

    mViewModel?.getPlayerStatus()?.observe(viewLifecycleOwner, Observer {
        if(it == true){
            mBinding?.playerContainer?.seekbar?.max = mViewModel?.mAudioManager?.mediaPlayer?.duration!! / 1000
            Log.d(TAG, ("maxDuration: ".plus(mViewModel?.mAudioManager?.mediaPlayer?.duration!!)))
        }
    })

    mViewModel?.getPlayingStatus()?.observe(viewLifecycleOwner, Observer {
        if(it == true){
            val runnable = object : Runnable {
                override fun run() {
                    val currentPosition: Int = mViewModel?.mAudioManager?.mediaPlayer?.currentPosition!! / 1000
                    mBinding?.playerContainer?.currentPosition?.text = msToTime(mViewModel?.mAudioManager?.mediaPlayer?.currentPosition)
                    mBinding?.playerContainer?.seekbar?.progress = currentPosition

                    Log.d(TAG, mViewModel?.mAudioManager?.mediaPlayer?.currentPosition.toString())

                    mHandler.postDelayed(this, 1000)
                }
            }
            mHandler.post(runnable)
        }
    })


    fun msToTime(stuff: Int?): String {
    var duration = stuff!!.toLong()
    val hms = String.format(
        "%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(duration),
        TimeUnit.MILLISECONDS.toMinutes(duration) - TimeUnit.HOURS.toMinutes(
            TimeUnit.MILLISECONDS.toHours(
                duration
            )
        ),
        TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(
            TimeUnit.MILLISECONDS.toMinutes(
                duration
            )
        )
    )

    return hms
}

0 个答案:

没有答案