0

Я пробовал разные подходы, но ничто не решает мою проблему. Надеюсь, кто-то здесь может мне помочь. Простым требованием я хочу показать счетчик, пока не появится окно медиаплеера. Это звучит достаточно легко, но это не так.Невозможно отобразить прядильщик до получения медиапланера

Я звоню в класс mediaplayer на «Listen» click of alertDialog. Вот оно:

alertBox.setCancelable(false) 
    .setNegativeButton("Listen", new DialogInterface.OnClickListener(){ 
    public void onClick(DialogInterface dialog,int id){ 
dialog.dismiss(); 
emp = new EasyMediaPlayer(mp3PopupLayout,buttonPlayPause,seekBarProgress,tv_mp3,downloadURL); 
emp.startPlayingMP3();   
} 
}).show(); 

И функция startPlaying вызывает chooseToStart (истина), которая, в свою очередь, запускает медиа-плеер. Этот класс:

public class EasyMediaPlayer implements OnClickListener, OnTouchListener, OnCompletionListener, OnBufferingUpdateListener{ 
EasyMediaPlayer(View mp3PopupLayout,ImageView buttonPlayPause,SeekBar seekBarProgress,TextView tv_mp3, String MP3URL){ 
     this.mp3PopupLayout = mp3PopupLayout; 
     this.buttonPlayPause = buttonPlayPause; 
     this.seekBarProgress = seekBarProgress; 
     this.tv_mp3 = tv_mp3; 
     this.MP3URL = MP3URL; 
     seekBarProgress.setOnTouchListener(this); 
     buttonPlayPause.setOnClickListener(this); 
    } 

    public void startPlayingMP3(){ 
     mediaFileLengthInMilliseconds = 1; 
     tv_mp3.setText(""); 
     buttonPlayPause.setImageResource(R.drawable.button_play); 
     buttonPlayPause.setVisibility(View.GONE); 
     seekBarProgress.setProgress(0); 
     seekBarProgress.setSecondaryProgress(0); 
     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setOnBufferingUpdateListener(this); 
     mediaPlayer.setOnCompletionListener(this); 
     mediaPlayer.setOnErrorListener(new OnErrorListener() { 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       tv_mp3.setText("Error in playing file !!"); 
       return true; 
      } 
     }); 
     mp3DownloadWindow = new PopupWindow(mp3PopupLayout, LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT, true); 
     mp3DownloadWindow.showAtLocation(mp3PopupLayout, Gravity.BOTTOM, 30, 0); 
     chooseToStart(true); 
    } 

    public void chooseToStart(boolean startFlag){ 
     if(startFlag){ 
      try { 
       mediaPlayer.setDataSource(this.MP3URL); 
       mediaPlayer.prepare(); // you must call this method after setup the datasource in setDataSource method. After calling prepare() the instance of MediaPlayer starts load data from URL to internal buffer. 
       mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); // gets the song length in milliseconds from URL 
      } catch (Exception e) { 
       tv_mp3.setText(e.toString() + "\nClose it"); 
      } 

      if(!mediaPlayer.isPlaying()){ 
       spinner.cancel(); 
       mediaPlayer.start(); 
       buttonPlayPause.setImageResource(R.drawable.button_pause); 
      }else { 
       mediaPlayer.pause(); 
       buttonPlayPause.setImageResource(R.drawable.button_play); 
      } 
      primarySeekBarProgressUpdater(); 
     } 
    } 
//other stuff 
} 

Мне нужно знать, где и как я могу использовать вертушку так будет показано, пока медиаплеер не начнет играть.

Любая помощь будет оценена по достоинству. Спасибо

ответ

0

Используйте prepareAsync() и setOnPreparedListener() вместо prepare().

mediaPlayer.setDataSource(this.MP3URL); 
mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     // Hide whatever you need, mediaPlayer is prepared 
     mp.start(); 
    } 
}); 
// Show whatever you need, mediaPlayer is preparing 
mediaPlayer.prepareAsync(); 
+1

Thanks Ken. Я сделал это, используя prepareAsync(); –

Смежные вопросы