Некоторые устройства сообщают о java.lang.Исключение IllegalStateException при попытке воспроизвести медиаплеер Android

#java #android #android-mediaplayer

Вопрос:

Я следую диаграмме состояния медиаплеера, чтобы изменить источник звука и снова воспроизвести медиаплеер. Он нормально работает на большинстве устройств, но некоторые устройства(около 1%) получают java.lang.Исключение незаконного состояния. Я не могу воссоздать эту ошибку ни на одном из своих устройств. Вот отчет о трассировке стека.

 java.lang.IllegalStateException: 
  at android.media.MediaPlayer._setDataSource (MediaPlayer.java)
  at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1325)
  at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1308)
  at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1290)
  at android.media.MediaPlayer.attemptDataSource (MediaPlayer.java:1150)
  at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1112)
  at android.media.MediaPlayer.setDataSource (MediaPlayer.java:1049)
  at com.myapp.MyPlayer.newPlayMode (MyPlayer.java:423)
 
 

Строка 423 из MyPlayer.java это строка 2 следующего метода.

 static void newPlayMode(Context context)
{
            mPlayer.reset();
            alarmSound=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM).toString();
            mPlayer.setDataSource(context, Uri.parse(alarmSound));
            AudioManager audioManager = (AudioManager) context
                    .getSystemService(Context.AUDIO_SERVICE);
            if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
                mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mPlayer.setLooping(true);
                mPlayer.prepareAsync();

                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mPlayer.start();
                    }
                });
}