Android SeekBar para controlar el progreso de MediaPlayer

Tengo un SeekBar , exhibe correctamente el progreso de MediaPlayer . Sin embargo, tengo problemas con la búsqueda – si busco el cuadro de desplazamiento en algún lugar que sólo vuelve a la posición donde el archivo de audio está jugando.

 public class EntityPageActivity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{ private SeekBar seekBar; private Button startMedia; private Button pauseMedia; private MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entity_page); AudioControl(); } public void AudioControl(){ seekBar = (SeekBar) findViewById(R.id.seekBar); startMedia = (Button) findViewById(R.id.play); pauseMedia = (Button) findViewById(R.id.pause); startMedia.setOnClickListener(this); pauseMedia.setOnClickListener(this); } public void run() { int currentPosition= 0; int total = mp.getDuration(); while (mp!=null && currentPosition<total) { try { Thread.sleep(1000); currentPosition= mp.getCurrentPosition(); } catch (InterruptedException e) { return; } catch (Exception e) { return; } seekBar.setProgress(currentPosition); } } public void onClick(View v) { if (v.equals(startMedia)) { if (mp != null && mp.isPlaying()) return; if(seekBar.getProgress() > 0) { mp.start(); return; } mp = MediaPlayer.create(EntityPageActivity.this, R.raw.gl1); mp.start(); seekBar.setProgress(0); seekBar.setMax(mp.getDuration()); new Thread(this).start(); } if (v.equals(pauseMedia) && mp!=null) { mp.pause(); } } public void onStartTrackingTouch(SeekBar seekBar) { } public void onStopTrackingTouch(SeekBar seekBar) { } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser) mp.seekTo(progress); } } 

Por lo tanto, onProgressChanged no es suficiente para permitir que SeekBar para controlar MediaPlayer ?

¿Qué debo agregar / corregir para permitir la búsqueda?

Gracias

ACTUALIZAR

Descubrí que onProgressChanged nunca es invocado por alguna razón. Sin embargo no puedo entender por qué

El problema es seekBar.setOnSeekBarChangeListener(this); Así que ponerlo en su método AudioControl() ….. Usted no establece oncheckchangedlistner a su seekbar ….

Prueba con el código siguiente:

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser){ mp.seekTo(progress); seekbar.setProgress(progress);} } 

Tienes que incluir los métodos seekbar dentro de la onCreate . Tuve el mismo problema, y ​​funcionó después de eso.

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser){ mediaPlayer.seekTo(progress); seekBar.setProgress(progress); } 

Pruebe este código en el método onCreate () y ejecute el proyecto. Espero que esto esté funcionando.

 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { mediaPlayer.seekTo(i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); 

Estoy usando este código simple para hacer el truco.

 package in.bhartisoftwares.amit.allamitapps; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.SeekBar; import android.widget.Toast; import java.util.Timer; import java.util.TimerTask; public class audioControllerTwo extends AppCompatActivity { MediaPlayer mPlayer; SeekBar audioTraverse; 

Aquí he definido My SeekBar y MediaPlayer en clase pública. Luego en OnCreate Method Tengo código como este:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_audio_controller_two); mPlayer = MediaPlayer.create(this, R.raw.song); 

Aquí estoy creando mPlayer variable, que encuentra mi archivo de audio llamado "song" que está presente en la carpeta "raw".

Entonces agarré mi SeekBar llamado "audioTraverse" y lo asigné a "audioTraverse" variable y agarrar la "Duración" del archivo de audio y asignar esa duración a mi "audioTraverse" SeekBar como sigue:

  audioTraverse = (SeekBar) findViewById(R.id.audioTraverse); audioTraverse.setMax(mPlayer.getDuration()); 

Ahora estoy ejecutando un temporizador que se ejecutará después de cada segundo y se actualizará la posición SeekBar en consecuencia. Vea el siguiente código:

 new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { audioTraverse.setProgress(mPlayer.getCurrentPosition()); } },0, 1000); // here 0 represents first time this timer will run... In this case it will run after 0 seconds after activity is launched // And 1000 represents the time interval afer which this thread ie, "run()" will execute. In this case, it will execute after every 1 second 

Ahora estoy añadiendo "SeekBarChangeListener", esto buscará cualquier cambio en SeekBar y en "OnProgressChange ()" método que estoy usando ".seekTo ()" método para ir a una duración particular en el archivo de audio. El código es el siguiente:

  audioTraverse.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { Log.i("Tranverse Change: ", Integer.toString(i)); mPlayer.seekTo(i); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } } 
  • Android mediaplyer seekTo inside onPrepared
  • Contexto dentro de un Runnable
  • Android AudioRecord y MediaRecorder
  • Flujo de problemas de audio en ICS
  • Cómo cambiar el User-agent por defecto en mediaplayer del android
  • Enrutado del reproductor multimedia de Android
  • ANDROID: ¿Hay reproductor multimedia gratuito de terceros para streaming de vídeo MPEG4?
  • URL de MediaPlayer para Android con Cookie
  • Android Detener música de fondo cuando la tecla Inicio presionada
  • Forzar el vídeo para que se reproduzca en Orientación vertical sólo con MediaPlayer y VideoView
  • Reproducir un archivo de sonido de Internet cuando se hace clic en un botón
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.