AndroId MediaPlayer prepareAsync método
Tengo un problema extraño. Yo uso el método prepareAsync con elMediaPlayer
, pero el oyente que he declarado nunca es despedido. Trato de transmitir un live.mp3
Alimentación desde internet (emisora de radio). Utilizo un método en línea para el oyente, pero también intenté implementar la interfaz sin ningún éxito. Aquí hay una parte de mi código:
En la sección de miembros:
<code>String url = "http://<my_url>.mp3"; MediaPlayer mediaPlayer = new MediaPlayer(); </code>
En actividadonCreate()
:
<code>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(); </code>
Entonces, aquí está elpreparePlayer()
método:
<code>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(); } } </code>
Y (sólo para el registro), elonDetroy()
donde hago la limpieza:
<code>private void releaseMediaPlayer() { if (mediaPlayer != null) { if(mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release(); mediaPlayer = null; } } @Override protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); } </code>