Необъяснимая ошибка от MediaPlayer - PullRequest
0 голосов
/ 21 февраля 2010

Мой код пытается воспроизвести файл MP3 из res / raw.

Код:

FileDescriptor fd = appContext.getResources().openRawResourceFd(R.raw.ringtone)
                    .getFileDescriptor();
player = new MediaPlayer();
            try
            {
                player.setAudioStreamType(AudioManager.STREAM_RING);
                player.setDataSource(fd);
                player.prepare();           
            }
            catch (IllegalArgumentException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }
            catch (IllegalStateException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }

            player.setLooping(true);
            player.start();

Журнал показывает:

02-21 15: 18: 18.360: ОШИБКА / PlayerDriver (51): Команда PLAYER_SET_DATA_SOURCE завершена с ошибкой или информацией PVMFErrNotSupported 02-21 15: 18: 18.380: ОШИБКА / MediaPlayer (693): ошибка (1, -4) 02-21 15: 18: 18.390: WARN / PlayerDriver (51): PVMFInfoErrorHandlingComplete

После вызова player.prepare ().

У меня действительно нет намека. Я не буду использовать MediaPlayer.create (), потому что мне нужен player.setAudioStreamType (AudioManager.STREAM_RING);

Буду признателен за любую помощь в этом ...

Ответы [ 2 ]

3 голосов
/ 21 февраля 2010

Из документов MediaPlayer API :

Когда объект MediaPlayer просто создан с использованием нового или после reset() называется, он находится в состоянии Idle ; и после вызова release() это в состоянии End . Между этими двумя Штаты это жизненный цикл MediaPlayer объект.

Это ошибка программирования до вызывать методы, такие как getCurrentPosition(), ..., setAudioStreamType(int) в простое состояние.

Вы должны изучить диаграмму жизненного цикла MediaPlayer и предоставленные примеры и переписать свой код в соответствии с ними. В этом случае вы видите, что вам нужно позвонить setDataSource() до setAudioStreamType().

alt text


Примечание : В Android вам действительно нужно следить за событиями жизненного цикла для всего, что вы делаете, иначе вас укусят. Вы можете написать неверный код, и вы никогда не узнаете об этом до времени выполнения, или, что еще хуже, вы можете написать код, который, по вашему мнению, работает, и вы обнаружите только в странных обстоятельствах, что он не ... например. изменяется ориентация экрана, и метод обратного вызова в этом случае не совпадает или в других подобных ситуациях (кнопка «Домой» и т. д.).

2 голосов
/ 04 декабря 2011

У меня возникли аналогичные проблемы при попытке установить тип аудиопотока, и я нашел это руководство полезным: Пробелы в API: пример Android MediaPlayer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...