#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();
}
});
}