如何在 kotlin 中显示媒体播放器的位置/持续时间?

问题描述

我正在尝试将我的媒体播放器 {from seekbar} 定位和持续时间添加到文本视图,但我的代码似乎都不起作用。任何人都可以请帮助并告诉我我做错了什么吗?

这是我的代码,最后一个函数是我应该将位置和持续时间更改为时间

我的片段

class quranpdfListenBottomsheetFragment: BottomSheetDialogFragment(){


private var mediaPlayer:MediaPlayer? = null

// seekbar shared
val seekbar = this.activity?.getSharedPreferences("QuranPdf",Context.MODE_PRIVATE)


val playerPosition = view?.findViewById<TextView>(R.id.player_position)
val playerDuration =  view?.findViewById<TextView>(R.id.player_duraation)
private var totalTime: Int = 0




// here is where you can work with the buttons and texts
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
    super.onViewCreated(view,savedInstanceState)





    quranMp3()
}
fun quranMp3(){
    val  num = this.activity?.getSharedPreferences("QuranPdf",Context.MODE_PRIVATE)
    val quranPageNum = num?.getInt("pageNum",0)
    val ayaTitle = view?.findViewById<TextView>(R.id.ayaName)
    val quranPlay = view?.findViewById<FloatingActionButton>(R.id.quranPlay)
    val quranPause = view?.findViewById<FloatingActionButton>(R.id.quranPause)
    val quranStop = view?.findViewById<FloatingActionButton>(R.id.quranStop)

    val quranSeekBar = view?.findViewById<SeekBar>(R.id.mp3SeekBar)


  
    // quran aya sounds according to swiping through sharedpref( quranPageNum)
    quranPlay?.setonClickListener {
        if (quranPageNum?.equals(0)!!){

            if (mediaPlayer == null){
                mediaPlayer = MediaPlayer.create(context,Uri.parse("https://server7.mp3quran.net/basit/Almusshaf-Al-Mojawwad/001.mp3"))
                Log.d("quranMp3","ID: ${mediaPlayer!!.audioSessionId}")

                val position = mediaPlayer!!.currentPosition/100
                mp3SeekBar.progress = position
                totalTime = mediaPlayer!!.duration


                initializeSeekBar()



            }

            mediaPlayer?.start()
            Log.d("QuranMp3","Duration: ${mediaPlayer!!.duration/1000} seconds")

        }
        else if (quranPageNum in 1..44){


            if (mediaPlayer == null){
                mediaPlayer = MediaPlayer.create(context,Uri.parse("https://server7.mp3quran.net/basit/Almusshaf-Al-Mojawwad/002.mp3"))
                Log.d("quranMp3","ID: ${mediaPlayer!!.audioSessionId}")

                val position = mediaPlayer!!.currentPosition/100
                mp3SeekBar.progress = position
                initializeSeekBar()

                //  seekbar?.getInt("seekValue",position)
            }
            mediaPlayer?.start()
            Log.d("QuranMp3","Duration: ${mediaPlayer!!.duration/1000} seconds")
        }

    }
    
    }

    //quran mp3 seekbar

    mp3SeekBar.setonSeekBarchangelistener( object : SeekBar.OnSeekBarchangelistener{

        override fun onProgressChanged(seekBar: SeekBar?,progress: Int,fromUser: Boolean) {
            if (fromUser){
                mediaPlayer?.seekTo(progress)
            }
        }
        override fun onStartTrackingTouch(seekBar: SeekBar?) {
        }
        override fun onStopTrackingTouch(seekBar: SeekBar?) {
        }

    })

   

}
private fun initializeSeekBar() {

    totalTime = mediaPlayer!!.duration
    var current = mediaPlayer!!.currentPosition


    val mp3SeekBar = view?.findViewById<SeekBar>(R.id.mp3SeekBar)
    mp3SeekBar?.max = totalTime


    val handler = Handler()
    handler.postDelayed(object : Runnable {

        override fun run() {
            try {


                mp3SeekBar?.progress = mediaPlayer!!.currentPosition
                handler.postDelayed(this,1000)
               
                 // here is my time function

                var elapsedtime = createTimeLabel(current)
                playerPosition?.text = elapsedtime

                var remaining = createTimeLabel(totalTime - mediaPlayer!!.currentPosition)
                playerDuration?.text = "-$remaining"

            } catch (e: Exception) {
                mp3SeekBar?.progress = 0

            }
        }

    },0)
}
fun  createTimeLabel(time: Int): String{
    var timeLabel = ""
    var min = time / 1000 / 60
    var sec  = time / 1000 % 60

    timeLabel = "$min:"
    if (sec<10) {
        timeLabel += "0"
    }

    timeLabel += sec

    return timeLabel
}

photo

搜索栏之间的文字应该根据我的搜索栏进行更改

提前致谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)