Estoy intentando utilizar una SeekBar para mostrar tanto la longitud de una pista reproducida por una clase MediaPlayer como para habilitar la búsqueda dentro de la pista.Android SeekBar setProgress hace que mi MediaPlayer omita
Buscar dentro de la pista funciona bien. Sin embargo, actualizar el valor de progreso usando setProgress mientras se reproduce la pista parece causar un pequeño salto.
En el método onCreate, creo un hilo con un bucle que actualiza el valor de progreso de SeekBar para la pista actual. Este bucle se restablece cuando se cambia la pista.
private void createProgressThread() {
_progressUpdater = new Runnable() {
@Override
public void run() {
//Exitting is set on destroy
while(!_exitting) {
_resetProgress = false;
if(_player.isPlaying()) {
try
{
int current = 0;
int total = _player.getDuration();
progressBar.setMax(total);
progressBar.setIndeterminate(false);
while(_player!=null && current<total && !_resetProgress){
try {
Thread.sleep(1000); //Update once per second
current = _player.getCurrentPosition();
//Removing this line, the track plays normally.
progressBar.setProgress(current);
} catch (InterruptedException e) {
} catch (Exception e){
}
}
}
catch(Exception e)
{
//Don't want this thread to intefere with the rest of the app.
}
}
}
}
};
Thread thread = new Thread(_progressUpdater);
thread.start();
}
Idealmente prefiero no usar un hilo ya que entiendo que esto tiene sus desventajas. También disculpe la excepción de tragar: es difícil seguir buscando todos los estados de MediaPlayer en respuesta a eventos de IU. Sin embargo, mi verdadero problema es que la música se está saltando.
¿Alguien podría sugerir una forma alternativa de actualizar el progreso y explicar por qué la llamada a setProgress hace que la pista se salte incluso con el uso de un hilo separado?
Gracias de antemano.
Spot on. Gracias. –
¡BRILLIANT, descubrió este problema después de un día de depuración desesperada e impotente! :) Gracias. – Soham