AndroId MediaPlayer prepareAsync метод

У меня странная проблема. Я использую метод prepareAsync с MediaPlayer , но слушатель, который я объявил, просто не запускается. Я пытаюсь транслировать живой .mp3 канал из Интернета (радиостанции). Я использую встроенный метод для слушателя, но я также попытался реализовать интерфейс без каких-либо успехов. Вот часть моего кода:

В разделе участника:

 String url = "http://<my_url>.mp3"; MediaPlayer mediaPlayer = new MediaPlayer(); 

В Activity onCreate() :

 ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setOnClickListener(this); playButton.clearFocus(); playButton.setClickable(false); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setClickable(true); mp.start(); } }); preparePlayer(); 

Затем, вот метод preparePlayer() :

 private void preparePlayer() { if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(url); mediaPlayer.prepareAsync(); } catch (IllegalArgumentException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIllegalArgument), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IllegalStateException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIllegalState), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText( MyStreamActivity.this, getResources().getString(R.string.erreurIO), Toast.LENGTH_LONG).show(); e.printStackTrace(); } } 

И (только для записи), onDetroy() где я делаю уборку:

 private void releaseMediaPlayer() { if (mediaPlayer != null) { if(mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release(); mediaPlayer = null; } } @Override protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); } 

Вы устанавливаете OnPreparedListener в свой метод создания своей Activity а позже, возможно, создаете новый MediaPlayer в вашем preparePlayer() . Любой новый MediaPlayer будет иметь набор prepareListener . Вы также должны добавить errorlistener чтобы узнать, что происходит.

Вы можете переместить вызов setOnPreparedListener внутри

  if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } 

А также установить setOnErrorListener следующим образом:

 if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); mediaPlayer.setOnErrorListener(....); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setClickable(true); mp.start(); } }); } 

Измените e.printStackTrace(); в

 Log.e("tag", e.getMessage(), e); 

Надеюсь, что это поможет, сообщите нам, если у вас есть данные журнала, так как это также будет полезно.

Оказалось, я забыл упомянуть «@Override» поверх моего внутреннего метода. Как это :

 mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { ToggleButton playButton = (ToggleButton) findViewById(R.id.playToggleButton); playButton.setClickable(true); mp.start(); } }); 

Теперь все работает нормально. Ну … почти, так как навсегда требуется буфер …

Intereting Posts
Как отключить кнопку Android Back на одной странице и перейти на кнопку выхода на каждой другой странице Как установить drawerlayout ниже панели инструментов с расположением координатора Как получить версию SDK приложения, а не устройства? Что вызывает метод OnDraw для вызова View и когда Реализация IP-камеры в Android (просмотр видео в реальном времени с IP-камеры) В фоновом режиме проверьте Play Store, чтобы определить, доступно ли приложение для загрузки на устройство Фотосъемка с программным обеспечением на Android Как удалить медленный конец анимации с помощью ObjectAnimator? Импортировать CSV-контакты в телефон Android 4 «Не удалось инициализировать SDK App Engine на пути (пути)» на eclipse 4.2.2 с использованием Mac OSX Mountain Lion Java.lang.RuntimeException: ошибка: 0D0680A8: asn1 процедуры кодирования: ASN1_CHECK_TLEN: неправильный тег AlertDialog не отображает разделители в списке Java.lang.ClassNotFoundException: Не нашел класс на пути: DexPathList, После обновления sdk Android-браузер завораживает события для двух кранов в быстрой последовательности Студия Android: UnsatisfiedLinkError: findLibrary возвращается null – загрузка исходной библиотеки