اذهب إلى المحتوى
  • 0

كيف أحفظ قيمة الseekbar بلغة الكوتلن أو الجافا

عبدالرحمن العنزي4

السؤال

السلام عليكم انا لدي مشكلة لم أجد لها حلا الى هذه اللحظه. انا لدي تطبيق قرأني يعمل بنسخة pdf وملفات صوتيه داخل BottomSheet وكل شيء يعمل بشكل جيد لكن عندما أغلق الbottomsheet  الصوت يضل يعمل لكن القيمة الseekbar لا تعمل وتصل قيمتة الى النهايه وحتى الtextviews ترجع الى 0:00 كيف أحل هذه المشكلة بحيث عندما اغلف الbottomsheet يضل السيكبار والتيكست يعملان على الصوت؟

هذا الكود

 private var mediaPlayer:MediaPlayer? = null
 private var oTime = 0
private var sTime: Int = 0
private var eTime: Int = 0

  fun quranMp3(){

 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

                eTime = mediaPlayer!!.duration.toLong().toInt()
                sTime = mediaPlayer!!.currentPosition.toLong().toInt()

                if (oTime == 0) {
                    quranSeekBar!!.setMax(eTime)
                    oTime = 1
                }

                playerDuration?.text = String.format(
                    "%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(eTime.toLong()),
                    TimeUnit.MILLISECONDS.toSeconds(eTime.toLong()) - TimeUnit.MINUTES.toSeconds(
                        TimeUnit.MILLISECONDS.toMinutes(eTime.toLong())))

                playerPosition?.text = String.format(
                    "%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(sTime.toLong()),
                    TimeUnit.MILLISECONDS.toSeconds(sTime.toLong()) - TimeUnit.MINUTES.toSeconds(
                        TimeUnit.MILLISECONDS.toMinutes(sTime.toLong())))





                initializeSeekBar()



            }

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

        }

   quranPause?.setOnClickListener {

        if (mediaPlayer !== null){
            mediaPlayer?.pause()
            Log.d("QuranMp3", "Paused at: ${mediaPlayer!!.duration/1000} seconds")

        }



 mp3SeekBar.setOnSeekBarChangeListener( object : SeekBar.OnSeekBarChangeListener{

            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {


                if (fromUser){
                    mediaPlayer?.seekTo(progress)

                }
            }
            override fun onStartTrackingTouch(seekBar: SeekBar?) {
                val Toast = Toast.makeText(context,"تتبع..", Toast.LENGTH_LONG)
                Toast.setGravity(Gravity.CENTER_VERTICAL, 50, 50)
                Toast.show()
            }
            override fun onStopTrackingTouch(seekBar: SeekBar) {
                val Toast = Toast.makeText(context,"يرجى الانتظار للحصول على البيانات..", Toast.LENGTH_LONG)
                Toast.setGravity(Gravity.CENTER_VERTICAL, 50 ,50)
                Toast.show()


            }

        })

 private fun initializeSeekBar() {

    val mp3SeekBar = view?.findViewById<SeekBar>(R.id.mp3SeekBar)
    mp3SeekBar?.max = mediaPlayer!!.duration
    val playerPosition = view?.findViewById<TextView>(R.id.player_position)
    val playerDuration =  view?.findViewById<TextView>(R.id.player_duraation)

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


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

        override fun run() {


            try {

                sTime = mediaPlayer!!.currentPosition

                playerDuration!!.text = String.format(
                    "%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(eTime.toLong()),
                    TimeUnit.MILLISECONDS.toSeconds(eTime.toLong()) - TimeUnit.MINUTES.toSeconds(
                        TimeUnit.MILLISECONDS.toMinutes(eTime.toLong())))

                playerPosition?.text = String.format(
                    "%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes(sTime.toLong()),
                    TimeUnit.MILLISECONDS.toSeconds(sTime.toLong()) - TimeUnit.MINUTES.toSeconds(
                        TimeUnit.MILLISECONDS.toMinutes(sTime.toLong())))


                mp3SeekBar?.progress = sTime //mediaPlayer!!.currentPosition
                handler.postDelayed(this, 1000)

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

            }
        }

    }, 0)
}

هذه صور مشكلتي كما ترون عندما افتح الbottomsheet  كل شيء يعمل بشكل جيد لكن عندا اجعل الصوت يعمل وأغلق الbottomsheet لأقراء وأفتحة مجددا عندما أنهي القراءة السيكبار يصل الى النهايه والتيكست ترجع الى 0:00

أي شخص قادر أن يحل مشكلتي بالجافا أكتب جوابك بالجافا انا استطيع ترجمته الى برنامجي

شكرا لكم واتمنى ان يتم حل مشكلتي

 

320g7.jpg

2OWoe.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الحمدالله وجدت الحل 

اضافة هذا الكود ساعدني في تطبيقي

 override fun onResume() {


    try {

        if (mediaPlayer !=null && mediaPlayer!!.isPlaying){
            initializeSeekBar()
        }

    }catch (e : Exception){
        e.printStackTrace()
    }

    super.onResume()
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

أنت تقوم بكتابة الكود الخاص بعمل update للـ SeekBar بداخل:

if (mediaPlayer == null) {
  // ...
}

في مرحلة الـ initialization، ستكون قيمة هذه الـ condition خاطئة.

لذا، قم بكتابة الكود اللازم للتحكم في حفظ القيمة خارج الـ if condition.
 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعات قال إسلام عبدالعزيز:

أنت تقوم بكتابة الكود الخاص بعمل update للـ SeekBar بداخل:


if (mediaPlayer == null) {
  // ...
}

في مرحلة الـ initialization، ستكون قيمة هذه الـ condition خاطئة.

لذا، قم بكتابة الكود اللازم للتحكم في حفظ القيمة خارج الـ if condition.
 

لا زالت المشكله نفسها.. 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...