Звуковой файл выдает IllegalStateException

1

Я прочитал здесь один вопрос, но ни одна из них не решила мою проблему. Я пытаюсь воспроизвести файл мультимедиа, но он говорит:

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 (собственный метод)

Заранее спасибо.

Теги:

2 ответа

3

Сначала вам не нужно вызывать 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 больше.

Проверьте файл мультимедиа, чтобы убедиться, что он воспроизводится.

  • 0
    Спасибо! оказалось, мой файл не воспроизводится :)
  • 0
    @snns, отметьте это как правильный ответ.
0

Я столкнулся с той же проблемой. Когда я пишу эти четыре метода один за другим вместо того, чтобы поместить некоторую логику (код) между этими четырьмя линиями, и она была решена.

mediaPlayer.reset();
mediaPlayer.setDataSource("songpath");
mediaPlayer.prepare();
mediaPlayer.start();

вы хотите написать mp.reset() перед вызовом mp.prepare() И весь метод вызовет одну пока одну строку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню