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
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! –