logoImagina
iconCurso
Te recomendamos nuestro curso de Android 13
Descubre el curso de Android 13
Ir al curso
Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *

Implementa un Service Boot en tu aplicación de Android

iconImage
Publicado 2024-03-01
Actualizado el 2024-03-21

¿Qué es un componente Service?

Muchas aplicaciones utilizan un componente Service para actualizar los datos de sus aplicaciones. Hay veces que es deseable tener un Service (proceso en background) que se inicie al activar un dispositivo. Servicios como: correo, llamadas, acceso a Internet, escucha de mensajes… Todos ellos son activados al iniciar el dispositivo.

En el siguiente tutorial crearemos un Service que se activará al reiniciar nuestro dispositivo. Para realizar el tutorial es aconsejable conocer previamente: Activity, Service, IntentFileter y BroadcastReceiver de Android.

Si deseas aprender más sobre el tema, te recomendamos consultar nuestro curso sobre curso sobre desarrollo en Android.

Creación de un proyecto ServiceBoot

En primer lugar crearemos el nuevo proyecto ServiceBoot el que implementaremos una Activity, un Service y un BroadCastReceiver.

Funcion de cada componente

La función de cada componente es:

  • MainActivity: informar al usuario que el servicio se ha activado. Ésto no se suele hacer, al usuario no le interesa saber todo lo que se activa.
  • ServiceBoot: al crearse y al destruirse mostrará un Toast (notificación) en la pantalla y mandará un mesaje al Log que podremos ver mediante el DDMS.
  • ReceiverBoot: capturará el Intent con la acción:”android.intent.action.BOOT_COMPLETED” e iniciará la Activity y el Service.

Implementación

En primer lugar implementaremos el Service de forma que al crearse muestre por pantalla y en el Log "Servicio creado".

1package com.imaginagroup.serviceboot; 2 3import android.app.Service; 4import android.content.Intent; 5import android.os.IBinder; 6import android.util.Log; 7import android.widget.Toast; 8 9public class ServiceBoot extends Service { 10 11 @Override 12 public IBinder onBind(Intent intent) { 13 return null; 14 } 15 16 @Override 17 public void onCreate() { 18 super.onCreate(); 19 20 Toast.makeText(this, "Servicio creado", Toast.LENGTH_LONG).show(); 21 Log.d("SERVICEBOOT", "Servicio creado"); 22 } 23 24 @Override 25 public void onDestroy() { 26 super.onDestroy(); 27 28 Toast.makeText(this, "Servicio destruido", Toast.LENGTH_LONG).show(); 29 Log.d("SERVICEBOOT", "Servicio destruido"); 30 } 31}

El componente más importante es el ReceiverBoot, ya que es el encargado de activar los otros dos cuando el sistema Android se reinicia.

Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *

Estructura de los ficheros

Para iniciar el servicio lanzamos un Intent mediante startService() con la acción "com.imaginagroup.serviceboot.MyService" que es capaz de activarlo.

activity_main.xml

Cuando intentamos abrir una Activity desde un componente que no sea una actividad debemos de avisarle mediante un Flag que está siendo iniciada por un componente alternativo. Por lo demás crearemos la actividad de forma explicita.

1package com.imaginagroup.serviceboot; 2 3import android.content.BroadcastReceiver; 4import android.content.Context; 5import android.content.Intent; 6 7public class ReceiverBoot extends BroadcastReceiver { 8 9 @Override 10 public void onReceive(Context context, Intent intent) { 11 12 // LANZAR SERVICIO 13 Intent serviceIntent = new Intent(); 14 serviceIntent.setAction("com.imaginagroup.serviceboot.MyService"); 15 context.startService(serviceIntent); 16 17 // LANZAR ACTIVIDAD 18 Intent i = new Intent(context, Main.class); 19 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 20 context.startActivity(i); 21 } 22}

La actividad únicamente cargará el layout activity_main.xml.

MainActivity.java

Copiar el siguiente diseño en el layout que utilizará MainActivity.

1package com.imaginagroup.serviceboot; 2 3import android.app.Activity 4 5; 6import android.os.Bundle; 7 8public class MainActivity extends Activity { 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main); 14 } 15}

strings.xml

Añadiremos un nuevo string en el fichero strings.xml que está en la ruta res/values/strings.xml.

1<string name="serviceBoot">serviceBoot activado</string>

AndroidManifest.xml

Por último definiremos los componentes en el AndroidManifest.xml. Necesitamos el permiso "android.permission.RECEIVE_BOOT_COMPLETED" para poder capturar el Intent de inicio del sistema.

Añadiremos un IntentFilter en el Service para poder activarlo desde el Receiver. El servicio reaccionará ante la acción "com.imaginagroup.serviceboot.MyService".

ReceiverBoot se ejecutará al recibir la acción "android.intent.action.BOOT_COMPLETED".

Ejecución

Si ejecutamos por primera vez el proyecto se nos abrirá la Activity pero el servicio no se activará, ya que solo es lanzado cuando el dispositivo se reinicia.

Debemos de apagar y reiniciar el dispositivo como comprobar que funciona realmente nuestro proyecto. Al reiniciarlo nada más introducir el código PIN se lanzará MainActivity y veremos la notificación Toast informando de la creación del Servicio.

Si nos vamos a los Ajustes del dispositivo veremos que aún cerrando la Activity, nuestro servicio sigue activo.

Si tenemos el dispositivo conectando al depurador podremos ver en el LogCat el momento de inicio del servicio.

Sigue aprendiendo a desarrollar en Android

En conclusión, este tutorial nos ha mostrado cómo implementar un Service en Android que se activa al reiniciar el dispositivo. Aprendimos sobre los componentes clave, como MainActivity, ServiceBoot y ReceiverBoot, y cómo interactúan entre sí para lograr el funcionamiento deseado. Además, exploramos el uso de Intents, Toasts y Logs para informar al usuario y monitorear la actividad del servicio.

Si te ha interesado este tutorial y deseas seguir ampliando tus conocimientos en el desarrollo de aplicaciones para Android, te animo a explorar nuestro curso sobre desarrollo en Android. Nuestros cursos te brindarán la oportunidad de aprender más sobre los conceptos avanzados de Android, como la gestión de servicios, actividades y receptores, así como las mejores prácticas y técnicas actuales en el desarrollo móvil. ¡No dudes en aprovechar esta oportunidad para expandir tu experiencia en el fascinante mundo de Android!

Descubre la formación a tu medida
Rellena el formulario para obtener más información sobre los cursos.
Tamaño de la empresa *
Términos y condiciones *
iconClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClienticonClient