2013-04-02 20 views
7

ho il file mp3 di Android app stream e riprodurre questo file nel lettore, ma il problema è mediaPlayer.prepare(); prendi il buffer e il blocco delle app di molto tempo così ho provato a utilizzare prepareAsync(); // ma con questa funzione non riesco a giocare giocatore file successivoandroid mediaplayer flusso file mp3 online

file di solo singolo online se ho bisogno di giocare un altro file che dovrei chiudere l'attività riavvio quando

gioco non finisce giocare prossimo questo è il mio codice

e mi dispiace per il mio cattivo inglese

questo è il mio codice di qualsiasi aiuto per favore

public void playMp3(String _link) 
{ 
mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
    public void onPrepared(MediaPlayer mp) { 
     if(!mediaPlayer.isPlaying()){ 
     mediaPlayer.start(); 
     Progressbar.setVisibility(View.INVISIBLE); 
     play.setVisibility(View.GONE); 
     stop.setVisibility(View.VISIBLE); 
     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 
     } 
     updateProgressBar();  
    } 
}); 
mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     mediaPlayer.reset(); 
     songProgressBar.setProgress(0); 
     songProgressBar.setSecondaryProgress(0); 
     play.setVisibility(View.VISIBLE); 
     stop.setVisibility(View.GONE); 
     link = "http://server11.mp3quran.net/hawashi/002.mp3"; 
     playMp3(link); 

    } 
}); 
mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() { 
    @Override 
    public void onBufferingUpdate(MediaPlayer mp, int percent) { 
     // Toast.makeText(getApplicationContext(), "n" + percent, Toast.LENGTH_LONG).show(); 
     songProgressBar.setSecondaryProgress(percent); 

     if(percent==100) 
     { 
      Progressbar.setVisibility(View.INVISIBLE); 

     }else if(percent > songProgressBar.getProgress()) 
     { 
      Progressbar.setVisibility(View.INVISIBLE); 
     }else 
     { 
      Progressbar.setVisibility(View.VISIBLE); 
     } 

    } 
}); 

mediaPlayer.reset(); 
Progressbar.setVisibility(View.VISIBLE); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

try { 
    mediaPlayer.setDataSource(_link); 
    //mediaPlayer.prepare(); // might take long! (for buffering, etc) //@@ 
    mediaPlayer.prepareAsync(); 
} catch (IllegalArgumentException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (SecurityException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IllegalStateException e) { 
    // TODO Auto-generated catch block/// 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}} 

risposta

8

In realtà io non so dove è errore nel codice, ma vi spiegherò come ho fatto nella mia app

public void playMp3(String _link){ 

       mediaPlayer.reset(); 
       Progressbar.setVisibility(View.VISIBLE); 
       mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

      try { 
       mediaPlayer.setDataSource(_link); 
       mediaPlayer.setOnBufferingUpdateListener(this); 
       mediaPlayer.setOnPreparedListener(this); 
       //mediaPlayer.prepare(); // might take long! (for buffering, etc) //@@ 
       mediaPlayer.prepareAsync(); 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SecurityException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block/// 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

Poi implementa OnCompletionListener, OnPreparedListener e OnBufferingUpdateListener nella tua classe

public class PlayerActivity extends Activity implements OnCompletionListener, OnPreparedListener, OnBufferingUpdateListener{ 
. 
. 
. 

e attrezzi tutti i metodi

public void onPrepared(MediaPlayer mediaplayer) { 
    if(!mediaPlayer.isPlaying()){ 
     mediaPlayer.start(); 
     Progressbar.setVisibility(View.INVISIBLE); 
     play.setVisibility(View.GONE); 
     stop.setVisibility(View.VISIBLE); 
     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 
     } 
     updateProgressBar();  
} 

@Override 
public void onCompletion(MediaPlayer mediaPlayer) { 
    //mediaPlayer.reset(); 
     songProgressBar.setProgress(0); 
     songProgressBar.setSecondaryProgress(0); 
     play.setVisibility(View.VISIBLE); 
     stop.setVisibility(View.GONE); 
     link = "http://server11.mp3quran.net/hawashi/002.mp3"; 
     playMp3(link); 
} 

@Override 
public void onBufferingUpdate(MediaPlayer mp, int percent) { 
    songProgressBar.setSecondaryProgress(percent); 

     if(percent==100) 
     { 
      Progressbar.setVisibility(View.INVISIBLE); 

     }else if(percent > songProgressBar.getProgress()) 
     { 
      Progressbar.setVisibility(View.INVISIBLE); 
     }else 
     { 
      Progressbar.setVisibility(View.VISIBLE); 
     } 
} 

Vorrei che questo ti abbia aiutato.

+0

questo lavoro perfetto con ringraziarmi, mi dimentico di controllare se mediaPlayer.isPlaying :) onPrepared –

+0

questo url per lo streaming (RTSP (RTP, SDP) HTTP/HTTPS streaming progressivo) o posso usare questo per qualsiasi MP3 Download url? dire che ho il download diretto url _http: //blabla.com/example.mp3_ (se mettiamo questo url in firefox verrà scaricato) –

+0

Ho un piccolo problema con questo codice. mediaPlayer riproduce solo il primo file nel mio ArrayList. Dopo che il primo file è stato riprodotto, onCompletionListener viene chiamato più volte (infinito) – artouiros

Problemi correlati