我正在从url播放mp3文件,但是SeekBar在播放歌曲时没有更新。
当我试图强行移动时,会从头开始播放歌曲。
下面我用来播放和更新SeekBar的代码。
我想创建一个seekbar来跟踪媒体播放器的进度,但是效果不佳,正在播放音乐,但seekbar保持空闲状态。有我遗漏的东西吗?
我认为我不是没有从正确的位置调用 updateSeekBar()方法...所以尝试了 updateSeekBar()的更改位置,但是没有用... < / p>
我错过了什么吗...?请帮助...。我是Android的新手...
Activity.java
Play = findViewById(R.id.Play_button);
Play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
play (url);//Song Url
}
});
private void play(String url) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
try {
if (temp == playurl.length) {
temp = 0;
play(playurl[temp]);
t1.setText(mobileArray[temp]);
} else {
temp = temp + 1;
play(playurl[temp]);
t1.setText(mobileArray[temp]);
}
}catch(ArrayIndexOutOfBoundsException exception) {
temp = 0;
play(playurl[temp]);
t1.setText(mobileArray[temp]);
}
}
});
mediaPlayer.setDataSource(url);
} catch (IllegalArgumentException e) {
Toast.makeText(getApplicationContext(), "Please Check Your Internet Connection!", Toast.LENGTH_LONG).show();
} catch (SecurityException e) {
Toast.makeText(getApplicationContext(), "Please Check Your Internet Connection!", Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
Toast.makeText(getApplicationContext(), "Please Check Your Internet Connection!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception ex){
String err = (ex.getMessage()==null)?"SD Card failed":ex.getMessage();
Log.e("sdcard-err2:",err);
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
Toast.makeText(getApplicationContext(), "Please Check Your Internet Connection!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Please Check Your Internet Connection!", Toast.LENGTH_LONG).show();
}catch (Exception ex){
String err = (ex.getMessage()==null)?"SD Card failed":ex.getMessage();
Log.e("sdcard-err2:",err);
}
try {
mediaPlayer.start();
}catch (Exception ex){
String err = (ex.getMessage()==null)?"SD Card failed":ex.getMessage();
Log.e("sdcard-err2:",err);
}
finalTime = mediaPlayer.getDuration();
updateSeekBar();
startTime = mediaPlayer.getCurrentPosition();
}
private void updateSeekBar() {
seekBar.setProgress((int) (((float) mediaPlayer.getCurrentPosition() / mediaFileLength) * 100));
if (mediaPlayer.isPlaying()) {
Runnable updater = new Runnable() {
@Override
public void run() {
updateSeekBar();
}
};seekBar.post(updater);
}
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
seekBar.setSecondaryProgress(percent);
}
答案 0 :(得分:0)
尝试
SeekBar.setProgress(0);
SeekBar.setMax(100);
mediaPlayer.start()之后;
答案 1 :(得分:0)
尝试
mediaFileLength = mediaPlayer.getDuration();
realtimeLength = mediaFileLength;
mediaPlayer.start();
finalTime = mediaPlayer.getDuration();
startTime = mediaPlayer.getCurrentPosition();
updateSeekBar();