如何在加载歌曲时从头开始实现ProgressDialog?

问题描述 投票:0回答:1

我想在媒体播放器准备开始时就实现ProgressDialog。我试图弄清楚在媒体播放器准备流式文件时如何显示“正在加载。请稍候...”的ProgressDialog。

这是我的主要活动

public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnBufferingUpdateListener {

    private ImageView buttonPlayPause;
    private SeekBar seekBarProgress;
    private MediaPlayer mediaPlayer;
    private int mediaFileLengthInMilliseconds;

    private final Handler handler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        buttonPlayPause = findViewById(R.id.btnPlay);
        buttonPlayPause.setOnClickListener(this);

        seekBarProgress = findViewById(R.id.SeekBarTestPlay);
        seekBarProgress.setMax(99);
        seekBarProgress.setOnTouchListener(this);


        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnBufferingUpdateListener(this);
        mediaPlayer.setOnCompletionListener(this);


    }

    private void primarySeekBarProgressUpdater() {
        seekBarProgress.setProgress((int) (((float) mediaPlayer.getCurrentPosition() / mediaFileLengthInMilliseconds) * 100));
        if (mediaPlayer.isPlaying()) {
            Runnable notification = new Runnable() {
                public void run() {
                    primarySeekBarProgressUpdater();
                }
            };
            handler.postDelayed(notification, 1000);
        }
    }

    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.btnPlay) {

            try {
                mediaPlayer.setDataSource("https://www.ssaurel.com/tmp/mymusic.mp3");
                mediaPlayer.prepare();
            } catch (Exception e) {
                e.printStackTrace();
            }

            mediaFileLengthInMilliseconds = mediaPlayer.getDuration();

            if (!mediaPlayer.isPlaying()) {
                mediaPlayer.start();
                buttonPlayPause.setImageResource(R.drawable.ic_pause);
            } else {
                mediaPlayer.pause();
                buttonPlayPause.setImageResource(R.drawable.ic_play);
            }

            primarySeekBarProgressUpdater();
        }
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (v.getId() == R.id.SeekBarTestPlay)
        {
            if (mediaPlayer.isPlaying()) {
                SeekBar sb = (SeekBar) v;
                int playPositionInMillisecconds = (mediaFileLengthInMilliseconds / 100) * sb.getProgress();
                mediaPlayer.seekTo(playPositionInMillisecconds);
            }
        }
        return false;
    }

    @Override
    public void onCompletion(MediaPlayer mp)
    {
        buttonPlayPause.setImageResource(R.drawable.ic_play);
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent)
    {
        seekBarProgress.setSecondaryProgress(percent);
    }
    @Override
    public void onBackPressed() {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }
        super.onBackPressed();
    }

}
java android android-mediaplayer audio-streaming progressdialog
1个回答
0
投票

具有ProgressDialog作为成员对象

public class MainActivity extends AppCompatActivity........

private ProgressDialog dialog;
.....
.....

现在在mediaPlayer.prepare()之后显示它

try {

mediaPlayer.setDataSource("https://www.ssaurel.com/tmp/mymusic.mp3");
mediaPlayer.prepare();
//here
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("loading file....");
dialog.show();

现在准备interface时再实现一个MediaPlayer.OnPreparedListener mediaplayer来收听:

 //implement one more interface like this

public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnBufferingUpdateListener , MediaPlayer.OnPreparedListener {



 //now override this method

  @Override
  public void onPrepared(MediaPlayer mp){
  //this is called when the media file is ready for playback
  //hide the progress dialog

   dialog.hide();

  }

更新:

尝试这样

try {

//here
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("loading file....");
dialog.show();

mediaPlayer.setDataSource("https://www.ssaurel.com/tmp/mymusic.mp3");
mediaPlayer.prepare();
© www.soinside.com 2019 - 2024. All rights reserved.