Я использую Media Player в моем приложении для Android, которое воспроизводит аудиофайлы с данного URL.Я также хочу обновить индикатор выполнения во время воспроизведения аудиофайла.Для этого я использую seekbar.setMax (mediaplayer.getDuration ()) в методе onPrepated (), но mediaplayer.getDuration () выбрасывает исключение invalidStateException и показывает состояние mediaplayer = 0 или 1, в то время как тот же код работает для android 7 &младшие версии
Мой код ниже:
Map<String, String> map = new HashMap<>();
map.put("X-CSRF-Token",preferences.getString("token",null));
map.put("Cookie",preferences.getString("sessid",null));
map.put("Content-Type","application/json");
mediaPlayer.setDataSource(context,Uri.parse(mediaUrl),map);
mediaPlayer.prepareAsync();
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
seekBarProgress.setMax(mediaPlayer.getDuration());
seekBarProgress.setProgress(0);
primarySeekBarProgressUpdater(mediaPlayer.getCurrentPosition());
}
// method for updating seekbar
public void primarySeekBarProgressUpdater(final int i) {
try {
if (mediaPlayer.isPlaying()) {
handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
if (mediaPlayer != null && seekBarProgress != null) {
if (mediaPlayer.getDuration() > 0) {
seekBarProgress.setProgress(mediaPlayer.getCurrentPosition());
}
}
if (handler != null) {
handler.postDelayed(this, 1000);
}
}
}, 1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}