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>

Respuestas a la pregunta(2)

Su respuesta a la pregunta