2013-04-02 13 views
7

Mam plik mp3 z aplikacją Android i odtwarzam ten plik w odtwarzaczu, , ale problemem jest mediaPlayer.prepare(); wziąć długi bufor czasu i aplikacja zamrozić , więc próbowałem użyć prepareAsync(); // ale z tej funkcji nie mogę zrobić GRACZ następny plikStrumień multimediów z Androidem w Internecie plik mp3

tylko pojedynczy plik online muszę grać inny plik i powinien zamknąć działalność restartu kiedy

zabaw nie zakończył grać obok to mój kod

i przepraszam za mój zły język angielski

to jest mój kod jakiejkolwiek pomocy proszę

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(); 
}} 

Odpowiedz

8

Właściwie nie wiem, gdzie jest błąd w kodzie, ale opiszę jak zrobiłem to w mojej aplikacji

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(); 
      } 
     } 

Następnie realizuje OnCompletionListener, OnPreparedListener i OnBufferingUpdateListener w swojej klasie

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

i wdraża wszystkie metody:

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); 
     } 
} 

Chciałbym, aby ci to pomogło.

+0

dziękuję to praca idealna ze mną, zapomnij sprawdzić, czy mediaPlayer.isPlaying :) onPrepared –

+0

to dla strumieniowego URL (RTSP (RTP, SDP) HTTP/HTTPS progresywny strumieniowe) czy mogę użyć tego do każdej mp3 download adres URL? mówię, że mam bezpośredni adres do pobrania _http: //blabla.com/przykład.mp3_ (jeśli umieścimy ten adres w firefox zostanie pobrany) –

+0

Mam mały problem z tym kodem. MediaPlayer odtwarza tylko pierwszy plik w mojej tablicy ArrayList. Po odtworzeniu pierwszego pliku onCompletionListener jest wywoływany wiele razy (nieskończenie) – artouiros

Powiązane problemy