2016-03-23 12 views
0

Ich versuche, einem Media Player, der aus dem Internet streamt, eine Suchleiste hinzuzufügen. Aus irgendeinem Grund funktioniert es jedoch nicht. Ich verwende einen Handler, um die Benutzeroberfläche jede Sekunde zu aktualisieren. Hier ist mein Code unten:Android SeekBar Fortschritt funktioniert nicht?

public class MainActivity extends AppCompatActivity { 
MediaPlayer mediaPlayer; 
boolean isPrepared = false; 
ImageButton imageButton; 
Handler handler; 
SeekBar seekBar; 
TextView notifying; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    imageButton = (ImageButton) findViewById(R.id.imageButton); 
    seekBar = (SeekBar) findViewById(R.id.seekBar); 
    notifying = (TextView) findViewById(R.id.notifying); 

    handler = new Handler(); 
    final Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 

      if (mediaPlayer != null) { 
       int mCurrentPosition = mediaPlayer.getCurrentPosition()/1000; 
       Log.i("message", mCurrentPosition + ""); 
       seekBar.setProgress(mCurrentPosition); 

      } 
      handler.postDelayed(this, 1000); 
     } 
    }; 
    handler.postDelayed(runnable, 1000); 


    try { 
     mediaPlayer.setDataSource("Any mp3 souund from the internet"); 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      Log.i("message", "prepared"); 
      isPrepared = true; 
     } 
    }); 
    mediaPlayer.prepareAsync(); 
    seekBar.setMax(mediaPlayer.getDuration()); 
} 

public void play(View view) { 
    if (!mediaPlayer.isPlaying() && isPrepared == true) { 
     Log.i("message", isPrepared + ""); 
     Log.i("message", mediaPlayer.isPlaying() + ""); 
     Log.i("message", (mediaPlayer.getDuration()/1000)/60 + ""); 
     mediaPlayer.start(); 
     imageButton.setImageResource(R.drawable.pause); 

    } else { 

     mediaPlayer.pause(); 
     imageButton.setImageResource(R.drawable.play); 
    } 
} 

public void stop(View view) { 
    if (mediaPlayer != null & mediaPlayer.isPlaying()) { 
     mediaPlayer.pause(); 
     mediaPlayer.seekTo(0); 

     imageButton.setImageResource(R.drawable.play); 
    } 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if (mediaPlayer != null) { 
     mediaPlayer.release(); 
     mediaPlayer = null; 

    } 
} 

Antwort

1

Ich bin nicht sicher, aber versuchen Sie dies:

setzen Sie diese Zeile innerhalb preperalistener Rückruf

seekBar.setMax(mediaPlayer.getDuration()); 

wie folgt aus:

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      Log.i("message", "prepared"); 
      isPrepared = true; 
      seekBar.setMax(mediaPlayer.getDuration()); 

     } 
    }); 

Auch ich glaube hier int mCurrentPosition = mediaPlayer.getCurrentPosition()/1000; sollte man nicht durch 1000 dividieren.

sonst seekBar.setMax(mediaPlayer.getDuration()/1000);

+0

mediaPlayer.setDataSource ("Any mp3 souund aus dem Internet"); Laden Sie ein MP3 in den Mediaplayer? – z3n105

+0

Ja natürlich. Ich habe es hier im Code einfach leer gelassen, aber in meiner App habe ich bestimmte Daten aus dem Internet eingestellt. –

+0

int mCurrentPosition = mediaPlayer.getCurrentPosition()/1000; Warum teilst du hier 1000? – z3n105