我尝试使用MediaPlayer
并在ProgressBar
中显示当前位置。媒体播放器本身有效,但ProgressBar
没有显示任何内容。以下是代码:
final Uri fileUri = Uri.fromFile(audioFile);
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
new Thread(new Runnable() {
@Override
public void run() {
try {
mp.setDataSource(getApplicationContext(), fileUri);
mp.prepare();
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
progress = findViewById(R.id.audioProgressBar);
audioDuration = mp.getDuration();
progress.setMax(100);
new Thread(new Runnable() {
@Override
public void run() {
while (progressStatus <= audioDuration) {
progressStatus += 1;
handler.post(new Runnable() {
public void run() {
float progressFloat = ((float) mp.getCurrentPosition() / mp.getDuration()) * 100;
progress.setProgress((int) progressFloat);
}
});
try {
// Sleep for 200 milliseconds.
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
我希望你能帮助我!
答案 0 :(得分:0)
由于您在不同的线程中初始化mediaPlayer,因此您可能会获得getDuation
的值可能为空或不正确,因为您不确定是否已初始化mediaPlayer。
尝试使用以下方法,因为它将消除一次又一次设置最大进度的方法(因为不同的歌曲长度因此setMax将改变)。
将进度最大值设置为100而不是audioDuration。
progress.setMax(100);
然后在你的处理程序中按如下方式计算进度
//current value in the text view
handler.post(new Runnable() {
public void run() {
//Calculate progress
float progress = ((float) mp.getCurrentPosition() / mp.getDuration()) * 100;
progress.setProgress((int) progress);
}
});