gpt4 book ai didi

java - 使用媒体播放器更新进度条

转载 作者:行者123 更新时间:2023-12-02 11:25:35 25 4
gpt4 key购买 nike

我尝试使用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();

希望你能帮助我!

最佳答案

由于您在不同的线程中初始化 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);
}
});

关于java - 使用媒体播放器更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49656408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com