mediaplayer.getDuration () выбрасывает исключение invalidStateException в Android 8.1, но работает нормально в более низких версиях - PullRequest
0 голосов
/ 20 декабря 2018

Я использую 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();
    }
}
...