2011-05-17 21 views
5

Estoy reproduciendo canciones de sdcard con la barra de búsqueda. Mientras obtengo la duración de la canción, obtengo Intento de llamar a getDuration sin un mediaplayer válido y con la excepción de estado ilegal. el nombre de archivo y la ruta son válidos one.i intenté mucho tiempo no pude obtener la solución. y cómo mover la barra de búsqueda mientras se reproduce la canción. Por favor, ayúdame. mi código:Intento de llamar a getDuration sin un reproductor multimedia válido en el reproductor multimedia en Android

Button play,pause,stop; 
SeekBar seek; 
MediaPlayer mediaPlayer; 
SurfaceView sv; 
boolean isPlaying = false; 

    play.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      playsong(filename); 
     } 
    }); 


private void playsong(String filename2) { 
    try{ 
     Log.e("filename2",filename2); 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setDataSource(filename2); 
     seek.setMax(mediaPlayer.getDuration()); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
     myHandler.post(runn); 
     isPlaying = true; 
     mediaPlayer.setOnCompletionListener(this);   
    } 
    catch(Exception ex){ 
     Log.e("sdcard-err2:",""+ex); 
    } 

} 

private Handler myHandler = new Handler(); 
    final Runnable runn = new Runnable() 
    { 
     public void run() 
     { 
      if (mediaPlayer != null) 
      { 
       if (isPlaying) 
       { 
        try 
        { 
         int currentPosition = mediaPlayer.getCurrentPosition(); 

         seek.setProgress(currentPosition); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

        sv.postDelayed(runn, 150); 
       } 
      } 
     } 

    }; 

mis errores de registro gato:

05-17 09:46:43.578: ERROR/filename2(1670): /sdcard/The Dance Theme.mp3 
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Attempt to call getDuration without a valid mediaplayer 
05-17 09:46:43.594: ERROR/MediaPlayer(1670): error (-38, 0) 
05-17 09:46:43.594: ERROR/MediaPlayer(1670): prepareAsync called in state 0 
05-17 09:46:43.594: ERROR/sdcard-err2:(1670): java.lang.IllegalStateException 
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Error (-38,0) 

Respuesta

12

Es posible que se llama getDuration antes de que el archivo se ha cargado completamente. Vea si la solución a this question le funciona.

+0

gracias, funciona. –

Cuestiones relacionadas