В настоящее время я пытаюсь разработать простое приложение, которое транслирует интернет-радиостанции. У меня есть URL-адрес станции, и я настраиваю медиаплеер, например
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(URL);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
Программа не вылетает при эмуляции, но ничего не воспроизводится, и я получаю следующую ошибку:
start called in state 0
и прямо под ним
Error (-38,0)
Кто-нибудь знает что это значит?
Я немного читал об этих ошибках состояния, но не нашел ничего, что относилось бы к моему проекту.
android
android-mediaplayer
SmashCode
источник
источник
Ответы:
Вам необходимо позвонить
mediaPlayer.start()
вonPrepared
методе с использованием слушателя. Вы получаете эту ошибку, потому что звонитеmediaPlayer.start()
до того, как она достигла подготовленного состояния.Вот как это сделать:
источник
Похоже, что ошибка -38 означает исключение состояния (как указывает сообщение об ошибке). Например, если вы звоните
start()
до того , как песня была готова, или когда вы звонитеpause()
, даже если песня вообще не воспроизводится.Чтобы решить эту проблему, проверьте состояние mediaPlayer перед вызовом методов. Например:
Кроме того, MediaPlayer отправляет сообщения о событиях. Даже если вам не нужно подготовленное событие (хотя было бы неплохо не начинать воспроизведение до того, как это событие было запущено), вы должны установить callback-listener. Это также справедливо и для
OnErrorListener
,OnCompletionListener
,OnPreparedListener
иOnSeekCompletedListener
(если вы вызываете искать метод).Слушателей можно просто прикрепить
источник
У меня возникла эта ошибка, когда я пытался получить текущую позицию (MediaPlayer.getCurrentPosition ()) медиаплеера, когда ее не было в подготовленном заявлении. Я обошел это, отслеживая его состояние и вызывая метод getCurrentPosition () только после вызова onPreparedListener.
источник
Это мой код, протестированный и работающий нормально:
источник
Я тестировал код ниже. работает нормально
источник
SetAudioStreamType(..)
использованияSetAudioAttributes(...)
Я столкнулся с той же проблемой несколько дней назад. Мой аудио MediaPlayer отлично работает на устройствах с высокой вычислительной мощностью, но для медленных устройств медиаплеер просто не воспроизводился какое-то время, и из LogCat он часто жаловался, что вызывается в неправильном состоянии. Итак, я решил это, вызвав вызов метода start () , pause () , ... в методе onPrepared () OnPreparedListener (), как показано ниже:
Также попробуйте выпустить любой медиаплеер, который вам больше не нужен. Например, если вы не хотите воспроизводить аудио или видео в фоновом режиме, вам следует вызвать mediaPlayer.release () в onPause () .
источник
Иногда файл кодируется так, что Android не может его декодировать. Невозможно воспроизвести даже некоторые файлы mp4. Пожалуйста, попробуйте другой формат файла (чаще всего воспроизводятся .3gp) и посмотрите ..
источник
над картинкой вы можете получить правильный путь.
источник
Вы получаете это сообщение в журналах, потому что вы делаете что-то, что не разрешено в текущем состоянии вашего экземпляра MediaPlayer.
Поэтому вы всегда должны регистрировать обработчик ошибок, чтобы отловить эти вещи (как предлагает @tidbeck).
Сначала я советую вам взглянуть на документацию к
MediaPlayer
классу и понять, что это означает с состояниями. См. Http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram.Ваша ошибка здесь может быть одной из распространенных, другие писали здесь, но в целом я бы взглянул на документацию о том, какие методы можно вызывать в каком состоянии: http://developer.android.com/ reference / android / media / MediaPlayer.html # Valid_and_Invalid_States
В моем примере это был метод
mediaPlayer.CurrentPosition
, который я вызвал, когда медиаплеер находился в состоянии, в котором нельзя было вызвать это свойство.источник
Я решил обе ошибки (-19,0) и (-38,0), создав новый объект MediaPlayer каждый раз перед воспроизведением и выпуская его после этого.
Перед :
}
После:
}
источник
источник
Это было очень расстроено. Итак, у меня есть решение, которое мне подходит.
источник
Для меня это сработало
источник
Я также получил эту ошибку, которую я пробовал с onPreparedListener, но все еще получил эту ошибку. Наконец, я получил решение, что ошибка - моя вина, потому что я забыл разрешение на доступ в Интернет в Android Manifest xml. :)
Я использовал образец кода для медиаплеера. Я использовал в StreamService.java
onCreate
методеисточник
Я столкнулся с той же проблемой прямо перед этим, друг на первом этаже был прав, вы позвонили
start()
не в то время, вы должны установить слушателя для prepare () илиprepareSync()
с помощью этого методаmediaPlayer.setOnPreparedListener(this)
; перед подготовкой в этом обратном вызове.start()
Это может решить вашу проблему. Я уже пробовал.источник
Я новичок в программировании Android, и у меня была такая же ошибка, как у этой. поэтому я просто переопределил mp.createmediaPlayer = MediaPlayer.create (getApplicationContext (), Settings.System.DEFAULT_RINGTONE_URI). Возможно, это не верный способ сделать это, но он сработал для меня:
источник
источник