我想在媒体播放器准备开始时就实现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();
}
}
具有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();