Tôi đang cố gắng sử dụng SeekBar để hiển thị cả độ dài của bản nhạc do lớp MediaPlayer phát và để cho phép tìm kiếm trong bản nhạc.Android SeekBar setProgress đang khiến MediaPlayer của tôi bỏ qua
Tìm kiếm trong bản nhạc hoạt động tốt. Tuy nhiên, việc cập nhật giá trị tiến trình bằng cách sử dụng setProgress trong khi bản nhạc đang phát có vẻ gây ra một chút bỏ qua.
Trong phương pháp onCreate, tôi tạo một chuỗi có vòng lặp cập nhật giá trị tiến độ của SeekBar cho bản nhạc hiện tại. Vòng lặp này đặt lại khi bản nhạc được thay đổi.
private void createProgressThread() {
_progressUpdater = new Runnable() {
@Override
public void run() {
//Exitting is set on destroy
while(!_exitting) {
_resetProgress = false;
if(_player.isPlaying()) {
try
{
int current = 0;
int total = _player.getDuration();
progressBar.setMax(total);
progressBar.setIndeterminate(false);
while(_player!=null && current<total && !_resetProgress){
try {
Thread.sleep(1000); //Update once per second
current = _player.getCurrentPosition();
//Removing this line, the track plays normally.
progressBar.setProgress(current);
} catch (InterruptedException e) {
} catch (Exception e){
}
}
}
catch(Exception e)
{
//Don't want this thread to intefere with the rest of the app.
}
}
}
}
};
Thread thread = new Thread(_progressUpdater);
thread.start();
}
Lý tưởng nhất là tôi không muốn sử dụng chuỗi khi tôi hiểu rằng điều này có bất lợi. Ngoài ra xin vui lòng tha thứ cho việc nuốt ngoại lệ - rất khó để kiểm tra tất cả các trạng thái của MediaPlayer theo các sự kiện giao diện người dùng. Tuy nhiên, vấn đề thực sự của tôi là âm nhạc bị bỏ qua.
Ai đó có thể đề xuất một cách khác để cập nhật tiến trình và giải thích lý do tại sao cuộc gọi đến setProgress đang khiến bài hát bỏ qua ngay cả khi sử dụng chuỗi riêng biệt?
Xin cảm ơn trước.
Bật. Cảm ơn bạn. –
BRILLIANT, tìm thấy vấn đề này sau một ngày gỡ lỗi bất lực điên cuồng! :) Cảm ơn bạn. – Soham