2016-10-04 1 views
0

J'ai récemment posté une question qui demande comment fonctionne SeekBars. Et quelqu'un m'a dirigé vers ce site/tutoriel: http://android-mantra.blogspot.com/2013/09/seekbar-for-music-player.htmlSeekBar n'affiche pas la position actuelle, mais joue toujours la musique sur la position souhaitée par l'utilisateur

Cela m'a vraiment aidé beaucoup et m'a aidé à comprendre comment fonctionnent les barres de recherche, mais j'ai toujours un problème. Quand je clique sur le bouton de lecture, la musique jouera, mais quand je cherche la musique, la barre de recherche restera à la position 0, bien que la musique tourne sur la position que je voulais. Voici mon code que je base (copie) du tutoriel.

package com.example.danbrianarenas.musictesterv2; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.StrictMode; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.SeekBar; 
import android.widget.Toast; 

public class MainActivity extends Activity implements Runnable,View.OnClickListener,SeekBar.OnSeekBarChangeListener 
{ 
    SeekBar seekBar; 
    Button startMedia; 
    Button stopMedia; 
    MediaPlayer mp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     seekBar = (SeekBar) findViewById(R.id.seekBar1); 
     startMedia = (Button) findViewById(R.id.button1); 
     stopMedia = (Button) findViewById(R.id.button2); 
     startMedia.setOnClickListener(this); 
     stopMedia.setOnClickListener(this); 
     seekBar.setOnSeekBarChangeListener(this); 
     seekBar.setEnabled(false); 
    } 

    public void run() 
    { 
     int currentPosition = mp.getCurrentPosition(); 
     int total = mp.getDuration(); 
     while (mp !=null && currentPosition<total) 
     { 
      try 
      { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       return; 
      } catch (Exception e){ 
       return; 
      } 
      seekBar.setProgress(currentPosition); 

     } 
    } 

    public void onClick(View view){ 
     if(view.equals(startMedia)){ 
      if(mp == null){ 
       mp=MediaPlayer.create(getApplicationContext(), R.raw.filc2); 
       seekBar.setEnabled(true); 
      } 
      if(mp.isPlaying()){ 
       mp.pause(); 
       startMedia.setText("Play"); 
      } 
      else{ 
       mp.start(); 
       startMedia.setText("Pause"); 
       seekBar.setMax(mp.getDuration()); 
       new Thread(this).start(); 
      } 
     } 
     if (view.equals(stopMedia) && mp!=null){ 
      if (mp.isPlaying() || mp.getDuration()>0){ 
       mp.stop(); 
       mp = null; 
       startMedia.setText("play"); 
       seekBar.setProgress(0); 
      } 
     } 
    } 

    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 
     try{ 
      if(mp.isPlaying() || mp!=null){ 
       if(fromUser) 
        mp.seekTo(progress); 
      }else if (mp==null){ 
       Toast.makeText(getApplicationContext(),"Media is not running!",Toast.LENGTH_SHORT).show(); 
       seekBar.setProgress(0); 
      } 
     }catch (Exception e){ 
      Log.e("seek bar", "" + e); 
      seekBar.setEnabled(false); 
     } 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar){ 
     //TODO Auto-generated method sub 
    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar){ 
     //TODO Auto-generated method sub 
    } 

} 

PS: s'il vous plaît dites-moi si vous avez besoin du fichier XML. :) TIA

Répondre

0

Comme vous n'êtes pas chaning la position de seekbar sur votre changement seekbar auditeur jour votre code et il fonctionnera:

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ 
     try{ 
      if(mp.isPlaying() || mp!=null){ 
       if(fromUser){ 
        seekBar.setProgress(progress); // ************** you have to add this line 
        mp.seekTo(progress); 
      }}else if (mp==null){ 
       Toast.makeText(getApplicationContext(),"Media is not running!",Toast.LENGTH_SHORT).show(); 
       seekBar.setProgress(0); 
      } 
     }catch (Exception e){ 
      Log.e("seek bar", "" + e); 
      seekBar.setEnabled(false); 
     } 
    } 
+0

il est en train de changer la position, mais se poursuit encore en position 0 après 1 sec et revient à la position voulue par l'utilisateur. la barre de recherche ne se met pas à jour également. Je comprends ce que vous dites et merci pour cela. hmmm .... ce bug est vraiment énervant. haha! –