En este ejemplo vamos a ver como crear un reproductor de música muy simple con la clase MediaPlayer y su método prepareAsync, que permite cargar la canción en un hilo secundario para no parar el hilo principal esperando que cargue la canción.
En este ejemplo, la canción la cargamos directamente de internet, pero podemos cojerla de otro sitio, podemos ver unos ejemplos aquí.
Vamos a ver el ejemplo. El xml que utilizaremos es este:

Código:

Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <ImageButton
        android:id="@+id/play"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="buttonPlay" //Esto evita tener que implementar
                                     //el OnClickListener en el botón o 
                                     //en la clase
        android:src="@drawable/play" />


</LinearLayout>



Hay que meterla en la carpeta res/drawable (si no está creada la creamos)
Después añadimos los permisos en el archivo AndroidManifest.xml:

Código:

Código:
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />



Estas lineas se añaden detrás de sdk utilizado, por ejemplo:

Código:
<uses-sdk android:minSdkVersion="8" />
Por último añadimos este código:

Código:

Código:
package m8.uf2.act4;


import java.io.IOException;


import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.view.View;


public class PrepareAsyncDemo extends Activity implements OnPreparedListener, OnCompletionListener{


    private MediaPlayer mediaPlayer;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    //Método que se llama al pulsar el botón play
    public void buttonPlay(View view) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {


        String url = "http://rpg.hamsterrepublic.com/wiki-images/6/67/ExtralongWarp.ogg";
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setOnPreparedListener(this);//como tenemos implementada la clase, podemos usar un this
        mediaPlayer.setOnCompletionListener(this);//esta clase implementada es para cuando ha acabado de cargar la canción
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(url);


        mediaPlayer.prepareAsync();
    }


    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();//Cuando acaba de cargar inicia la reproducción
    }


    @Override
    public void onCompletion(MediaPlayer mp) {
        mp = null;//Para que cuando pulses de nuevo el botón play, no cree otro reproductor, eliminamos el actual
    }


}