Android: servicio de inicio en el momento del arranque

Necesito comenzar un servicio en el momento del arranque. Busqué mucho. Están hablando de Broadcastreceiver. Como soy nuevo en el desarrollo de Android, no obtuve una idea clara de los servicios en Android. Proporcione algún código fuente.

Crea un BroadcastReceiver y regístralo para recibir ACTION_BOOT_COMPLETED . También necesita el permiso RECEIVE_BOOT_COMPLETED .

Leer: escuchar y difundir mensajes globales y configurar alarmas

Su receptor:

 public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, YourService.class); context.startService(myIntent); } } 

Su AndroidManifest.xml:

 < ?xml version="1.0" encoding="utf-8"?>                   

Es posible registrar su propio servicio de aplicación para que se inicie automáticamente cuando el dispositivo se haya iniciado. Lo necesita, por ejemplo, cuando desea recibir eventos push desde un servidor http y desea informar al usuario tan pronto como ocurra un nuevo evento. El usuario no tiene que iniciar la actividad manualmente antes de comenzar el servicio …

Es bastante simple. Primero, otorgue a su aplicación el permiso RECEIVE_BOOT_COMPLETED. A continuación, debe registrar un BroadcastReveiver. Lo llamamos BootCompletedIntentReceiver.

Su Manifest.xml ahora debería verse así:

            

Como último paso, debe implementar el Receptor. Este receptor solo comienza su servicio en segundo plano.

 package com.jjoe64; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.jjoe64.BackgroundService; public class BootCompletedIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent pushIntent = new Intent(context, BackgroundService.class); context.startService(pushIntent); } } } 

Desde http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html

A la mayoría de las soluciones publicadas aquí les falta una pieza importante: hacerlo sin un locking de activación corre el riesgo de que su Servicio muera antes de que se termine de procesar. Vi esta solución en otro hilo, respondiendo aquí también.

Primero debe obtener un locking por activación. Afortunadamente, la biblioteca de soporte nos da una clase para hacer esto:

 public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This is the Intent to deliver to our service. Intent service = new Intent(context, SimpleWakefulService.class); // Start the service, keeping the device awake while it is launching. Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); startWakefulService(context, service); } } 

luego, en su Servicio, asegúrese de liberar el locking de activación:

  @Override protected void onHandleIntent(Intent intent) { // At this point SimpleWakefulReceiver is still holding a wake lock // for us. We can do whatever we need to here and then tell it that // it can release the wakelock. ... Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); SimpleWakefulReceiver.completeWakefulIntent(intent); } 

No olvide agregar el permiso WAKE_LOCK y registrar su receptor en el manifiesto:

   ...      

debes registrarte para BOOT_COMPLETE y REBOOT

       

También registre su servicio creado en el Manifiesto y use permiso como

         

y luego en Braod cast Reciever llama a tu servicio

 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, MyService.class); context.startService(myIntent); } } 

Primero registre un receptor en su archivo manifest.xml:

        

y luego escribe una transmisión para este receptor como:

 public class Broadcast_PowerUp extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_POWER_CONNECTED)) { Toast.makeText(context, "Service_PowerUp Started", Toast.LENGTH_LONG).show(); } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) { Toast.makeText(context, "Service_PowerUp Stoped", Toast.LENGTH_LONG) .show(); } } }