0

我尝试了各种方法,但没有解决我的问题。希望这里有人可以帮助我。简单的要求是我想显示一个微调器,直到显示媒体播放器窗口。这听起来很容易,但事实并非如此。

我在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(true) 来运行媒体播放器。这个类是:

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
}

我需要知道在哪里以及如何使用微调器,以便在媒体播放器开始播放之前显示它。

任何帮助将不胜感激。谢谢

4

1 回答 1

0

使用prepareAsync()andsetOnPreparedListener()而不是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();
于 2013-07-31T07:13:16.267 回答