某些设备在尝试播放Android Mediaplayer时报告java.lang.IllegalStateException

某些设备在尝试播放Android Mediaplayer时报告java.lang.IllegalStateException,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我正在跟随媒体播放器更改音频源并再次播放媒体播放器。它在大多数设备上运行良好,但一些设备(约1%)出现java.lang.IllegalStateException。我无法在我的任何设备中重新创建此错误。这里是正在报告的堆栈跟踪 java.lang.IllegalStateException: at android.media.MediaPlayer._setDataSource (MediaPlayer.java) at android.media.MediaPlayer.setDa

我正在跟随媒体播放器更改音频源并再次播放媒体播放器。它在大多数设备上运行良好,但一些设备(约1%)出现java.lang.IllegalStateException。我无法在我的任何设备中重新创建此错误。这里是正在报告的堆栈跟踪

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)
 
java的第423行是以下方法的第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();
                    }
                });
}