Ich versuche eine SeekBar zu verwenden, um sowohl die Länge eines von einer MediaPlayer-Klasse gespielten Tracks anzuzeigen als auch das Suchen innerhalb des Tracks zu aktivieren.Android SeekBar setProgress lässt meinen MediaPlayer überspringen
Suchen innerhalb des Tracks funktioniert gut. Das Aktualisieren des Fortschrittswertes mit setProgress während der Wiedergabe des Titels scheint jedoch ein leichtes Überspringen zu verursachen.
In der onCreate-Methode erstelle ich einen Thread mit einer Schleife, die den Fortschrittswert der SeekBar für die aktuelle Spur aktualisiert. Diese Schleife wird zurückgesetzt, wenn die Spur geändert wird.
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();
}
Idealerweise würde ich eher einen Thread nicht benutzen, wie ich verstehe, dass dies Nachteile. Entschuldigen Sie bitte auch die Ausnahme, die das Schlucken von Ausnahmesituationen angeht - es ist schwierig, in Reaktion auf UI-Ereignisse nach allen MediaPlayer-Zuständen zu suchen. Mein echtes Problem ist jedoch, dass die Musik springt.
Könnte irgendjemand einen alternativen Weg vorschlagen, den Fortschritt zu aktualisieren und zu erklären, warum der Aufruf von setProgress dazu führt, dass die Spur sogar mit einem separaten Thread überspringt?
Vielen Dank im Voraus.
Spot auf. Vielen Dank. –
BRILLIANT, fand dieses Problem nach einem Tag der verzweifelten hilflosen Fehlersuche! :) Vielen Dank. – Soham