2010-10-14 8 views
5

Ich habe etwas Android-Code, um eine Audiodatei aus dem Internet zu streamen und den Stream nach 10 Sekunden abzuspielen.Wie kann ich den OnSeekBarChangeListener von SeekBar verwenden, um nach einem bestimmten Punkt in einem MediaPlayer-Objekt zu suchen?

Ich verwende eine SeekBar, um den Pufferstatus und Wiedergabestatus anzuzeigen. Ich möchte das Audio ab der Mitte des gepufferten Streams abspielen. Dazu verschiebe ich den SeekBar-Punkt in die Mitte, aber ich kann den Ton nicht von der Mitte aus spielen; es wird zurückgehen und von Anfang an beginnen. Wie kann ich die gesuchte Position erhalten und wie kann ich das Audio von dieser bestimmten Position abspielen?

Hier ist mein SeekBar-Code. Wie kann ich sicherstellen, dass dieser Code den OnSeekBarChangeListener korrekt verwendet?

seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

    @Override 
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
     // TODO Auto-generated method stub 
     if (arg2 && mediaPlayer.isPlaying()) { 
      //myProgress = oprogress; 
      arg1=mediaPlayer.getCurrentPosition(); 
      mediaPlayer.seekTo(arg1); 
     } 
    } 

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

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

}); 

Antwort

1
arg1=mediaPlayer.getCurrentPosition(); 
mediaPlayer.seekTo(arg1); 

Sie zwingen die Spieler auf die aktuelle Position zu suchen, und nicht auf die positon durch die SeekBar retuned

die Zeile entfernen: arg1=mediaPlayer.getCurrentPosition(); und es sollte funktionieren. Natürlich nach MediaPlayer.prepare() Set SeekBar.setMax(MediaPlayer.getDuration()), so wird Suche genau sein.

0

Ich denke, Sie müssen einen Thread machen ... Ich habe einen Code unten angegeben, den Sie versuchen können zu implementieren.

public void run() { 
    try 
    { 
     while(song1.getDuration()!=song1.getCurrentPosition()) 
     { 
      skbar.setProgress(song1.getCurrentPosition()); 
      //bStop.setText(song1.getCurrentPosition()); 
     } 
     if (song1.getDuration()==song1.getCurrentPosition()) 
      Log.v("log","Sanket"); 
     t.suspend(); 
    } 
    catch (Exception e) 
    { 
     Log.e("log",e.toString()); 
    } 
} 
Verwandte Themen