Я прочитал здесь один вопрос, но ни одна из них не решила мою проблему. Я пытаюсь воспроизвести файл мультимедиа, но он говорит:
E/MediaPlayer (554): prepareAsync вызывается в состоянии 8 W/System.err(554): java.lang.IllegalStateException W/System.err(554): at android.media.MediaPlayer.prepare (собственный метод)
Я не мог понять, где проблема. Работает (выдает исключение) на эмуляторе, сила закрывается на планшете. Я видел сообщение, в котором говорится, что я не должен использовать метод подготовки, но если я ничего не изменю.
Вот код и ошибки:
MediaPlayer player = MediaPlayer.create(MyAct.this, R.raw.zboo);
player.setLooping(false);
try {
player.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
player.start();
E/MediaPlayer (522): prepareAsync, вызываемый в состоянии 8
W/System.err(554): java.lang.IllegalStateException
W/System.err(554): at android.media.MediaPlayer.prepare (собственный метод)
Заранее спасибо.
Сначала вам не нужно вызывать prepare(), поскольку это делается путем создания в любом случае. Из документации для Android;
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
Во-вторых, если ситуация требует, что вам нужно подготовить, тогда используйте prepareAsync(), иначе пользовательский интерфейс может зависать. Асинхронный препарат делает часть подготовки на фоновом потоке и возвращает результаты, когда это делается. В документации на Android больше.
Проверьте файл мультимедиа, чтобы убедиться, что он воспроизводится.
Я столкнулся с той же проблемой. Когда я пишу эти четыре метода один за другим вместо того, чтобы поместить некоторую логику (код) между этими четырьмя линиями, и она была решена.
mediaPlayer.reset();
mediaPlayer.setDataSource("songpath");
mediaPlayer.prepare();
mediaPlayer.start();
вы хотите написать mp.reset() перед вызовом mp.prepare() И весь метод вызовет одну пока одну строку