Un servicio para ejecución en segundo plano.

Ejercicio paso a paso: Un servicio para ejecución en segundo plano de reproducción de música.

Veamos un ejemplo de servicio que corre en el mismo proceso de la aplicación que lo utiliza. El servicio será creado con la finalidad de reproducir una música de fondo y podrá ser arrancado y detenido desde la actividad principal.

1. Crea un nuevo proyecto con los siguientes datos:

Project Name: ServicioMusica

Package Name: org.example.serviciomusica

Minimun Requiered SDK: API 7: Android 2.1 (Eclair)

Compile With: API 17: Android 4.2

Activity Name: MainActivity  (valor por defecto)

Layout Name: activity_main  (valor por defecto)

2. Reemplaza el código del layout activity_main.xml por:

<LinearLayout

   xmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="vertical"

   android:layout_width="fill_parent"

   android:layout_height="fill_parent">

   <TextView android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:text="Servicio de reproducción de música"/>

   <Button android:id="@+id/boton_arrancar"

              android:layout_width="wrap_content"

               android:layout_height="wrap_content"

              android:text="Arrancar servicio"/>

   <Button android:id="@+id/boton_detener"

              android:layout_width="wrap_content"

              android:layout_height="wrap_content"

              android:text="Detener servicio"/>

</LinearLayout>

Se trata de un layout muy sencillo, con un texto y dos botones:

3. Reemplaza el código de la actividad por:

public class MainActivity extends Activity {

       @Override

       public void onCreate(Bundle savedInstanceState) {

             super.onCreate(savedInstanceState);

             setContentView(R.layout.activity_main);

            

             Button arrancar = (Button) findViewById(R.id.boton_arrancar);

             arrancar.setOnClickListener(new OnClickListener() {

                    public void onClick(View view) {

                           startService(new Intent(MainActivity.this,

                                        ServicioMusica.class));

                    }

             });

             Button detener = (Button) findViewById(R.id.boton_detener);

             detener.setOnClickListener(new OnClickListener() {

                    public void onClick(View view) {

                           stopService(new Intent(MainActivity.this,

                                        ServicioMusica.class));

                    }

             });

       }

}

4. Crea la nueva clase, ServicioMusica, con el siguiente código:

public class ServicioMusica extends Service {

       MediaPlayer reproductor;

 

       @Override

       public void onCreate() {

             Toast.makeText(this,"Servicio creado", 
                                                                                Toast.
LENGTH_SHORT).show();

             reproductor = MediaPlayer.create(this, R.raw.audio);

       }

 

       @Override

       public int onStartCommand(Intent intenc, int flags, int idArranque) {

             Toast.makeText(this,"Servicio arrancado "+ idArranque,
                                                                                Toast.
LENGTH_SHORT).show();

             reproductor.start();

             return START_STICKY;

       }

 

       @Override

       public void onDestroy() {

             Toast.makeText(this,"Servicio detenido", 
                                                                                Toast.
LENGTH_SHORT).show();

             reproductor.stop();

       }

 

       @Override

       public IBinder onBind(Intent intencion) {

             return null;

       }

}

5. Edita el fichero AndroidManifest.xml y añade la siguiente línea dentro de la etiqueta <application>.

<service android:name=".ServicioMusica" />

6. Crea una nueva carpeta con nombre raw dentro de la carpeta res. Arrastra a su interior el fichero audio.mp3. NOTA: puedes utilizar cualquier fichero de música compatible con Android siempre que el nombre de fichero sea audio.

7.  Ejecuta la aplicación y comprueba su funcionamiento. Puedes terminar la actividad pulsando el botón de retroceder y verificar que el servicio continua en marcha.  

8. Verifica que aunque pulses varias veces el botón “Arrancar servicio”, este no vuelve a crearse, pero sí que vuelve a llamarse al método onStartCommand(). Además, con solo una vez que pulses en “Detener servicio” este parará.

9. Arranca la aplicación Ajustes / Aplicaciones / Servicios en ejecución / Servicio de Música. Desde aquí puedes obtener información y detener el servicio.NOTA: Esta aplicación no está disponible en todas las versiones.