(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

Implementa un Service Boot en tu aplicación de Android

Android
Avanzado
30 minutos

Muchas aplicaciones utilizan un componenteService 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.

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

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.

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

package com.imaginagroup.serviceboot;



import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;



public class ServiceBoot extends Service {



	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}



	@Override
	public void onCreate() {
		super.onCreate();



		Toast.makeText(this, "Servicio creado", Toast.LENGTH_LONG).show();
		Log.d("SERVICEBOOT", "Servicio creado");
	}



	@Override
	public void onDestroy() {
		super.onDestroy();



		Toast.makeText(this, "Servicio destruido", Toast.LENGTH_LONG).show();
		Log.d("SERVICEBOOT", "Servicio destruido");
	}
}

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

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

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.

package com.imaginagroup.serviceboot;



import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;



public class ReceiverBoot extends BroadcastReceiver {



	@Override
	public void onReceive(Context context, Intent intent) {



		// LANZAR SERVICIO
		Intent serviceIntent = new Intent();
		serviceIntent.setAction("com.imaginagroup.serviceboot.MyService");
		context.startService(serviceIntent);



		// LANZAR ACTIVIDAD
		Intent i = new Intent(context, Main.class);
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		context.startActivity(i);
	}
}

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

MainActivity.java

package com.imaginagroup.serviceboot;



import android.app.Activity;
import android.os.Bundle;



public class MainActivity extends Activity {



	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}

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

strings.xml

<resources>
    <string name="app_name">serviceBoot</string>
    <string name="saludo">serviceBoot activado</string>
</resources>

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

activity_main.xml

<!--?xml version="1.0" encoding="utf-8"?-->
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">



<textview android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true" android:text="@string/saludo" android:textsize="25sp">



</textview></relativelayout>

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”.

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.imaginagroup.serviceboot" android:versioncode="1" android:versionname="1.0">



    <uses-sdk android:minsdkversion="8">



    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">



    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:label="main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">
                <category android:name="android.intent.category.LAUNCHER">
            </category></action></intent-filter>
        </activity>



        <service android:name=".ServiceBoot">
            <intent-filter>
                <action android:name="com.imaginagroup.serviceboot.MyService">
            </action></intent-filter>
        </service>



        <receiver android:name=".ReceiverBoot">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED">
                <category android:name="android.intent.category.HOME">
            </category></action></intent-filter>
        </receiver>
    </application>



</uses-permission></uses-sdk></manifest>

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.

En Imagina Formación te ofrecemos formación en estas nuevas tecnologías. Si quieres estar a la última en cualquiera de las diferentes plataformas, y a fin de cuentas, tu objetivo es aprender no dudes en solicitar información sin compromiso. Contamos con las herramientas y los medios necesarios para impartir cualquier tipo de formación. Te lo ponemos fácil. Formación online, presencial o de empresa, elige la modalidad que mejor se adapte a tus necesidades.

¿Sabes cómo puedes realizar una formación sin coste para tu empresa?

¿Buscas cursos bonificados? ¿Conoces qué es la Fundación Tripartita? Si eres trabajador tus cursos están subvencionados. Imagina Formación es una entidad organizadora de la Fundación Estatal de modo que puedes gestionar la formación bonificada de los cursos con nosotros. Nos encargamos de todos los trámites para conseguir la bonificación sin ningún coste adicional. Cumplimos con todos los requisitos para que nuestros cursos sean 100% bonificables.

Échale un vistazo a nuestro catálogo de Cursos Destacados y amplia tus conocimientos en las últimas tecnologías de referencia del sector. Si tienes cualquier duda… ¡Contacta con nosotros!

[/vc_row_inner]

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies