Cómo arreglar BOOT_COMPLETED no funciona en Android

8 minutos de lectura

avatar de usuario de yahya
yahya

Sé que se han hecho cientos de este tipo de preguntas, pero las he estado revisando todas por un tiempo y todavía no pude encontrar ninguna solución.

He visto esta respuesta a “Android BOOT_COMPLETED no recibido cuando se cierra la aplicación” dicho BOOT_COMPLETED no envíe a la aplicación a menos que el usuario inicie su aplicación primero, después de la versión 3.1 de Android, pero todavía veo que algunas aplicaciones lo están haciendo, por lo que debe haber una manera. Realmente necesito manejarlo, de lo contrario, también estoy en contra de hacer algo sin la interacción del usuario.

Aquí está mi manifiesto de Android:

<manifest ... >

<!-- to be activated service on boot is completed -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />

<application ... >
    <!-- to receive data when boot completed -->
    <receiver
        android:name="myPackage.BootReceiver"
        android:enabled="true"
        android:exported="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
</application>
</manifest>

Editar: No hay mucho que ver en mi receptor de transmisión, pero para quién se requiere aquí es:

package myPackage
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Utils.LogI("BootReceiver", "BootReceiver received!");
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        // Do my stuff
    }
}
}

  • ¿Qué dispositivo estás usando para la prueba? Si es HTC – stackoverflow.com/questions/10411731/…

    – JiTHiN

    07/12/2013 a las 13:30


Avatar de usuario de Piyush
Piyush

Esto a continuación funcionó para mí

AndroidManifest.xml

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

<application>    

    <receiver android:name=".BootCompletedReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

    <service android:name="NotifyingDailyService" >
    </service>

BootCompletedReceiver.clase

public class BootCompletedReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent arg1) {
    // TODO Auto-generated method stub
    Log.w("boot_broadcast_poc", "starting service...");
    context.startService(new Intent(context, NotifyingDailyService.class));
}

}

Servicio.clase

 public class NotifyingDailyService extends Service {

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent pIntent, int flags, int startId) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "NotifyingDailyService", Toast.LENGTH_LONG).show();
    Log.i("com.example.bootbroadcastpoc","NotifyingDailyService");

    return super.onStartCommand(pIntent, flags, startId);
}
}

  • @KarueBensonKarue Debe abrir su aplicación al menos una vez después de instalarla. O puede “Forzar la detención” accidentalmente, lo que a su vez evita que se reciban las transmisiones.

    – salida estándar

    30/09/2016 a las 21:11


  • Esto ya no funcionará stackoverflow.com/a/19856367/770467 (3.1+)

    – Androiderson

    5 oct 2016 a las 19:07

  • Revisé el enlace que mencionaste, tal vez no lo entiendas. es el estado de parada de un solicitud no actividad. Las aplicaciones están en un estado detenido cuando están instalado por primera vez pero aún no se ha lanzado y cuando el usuario los detiene manualmente (en Administrar aplicaciones). *Eso significa que el usuario debe iniciar la aplicación al menos una vez después de la instalación para activarla, luego la aplicación puede recibir todas las transmisiones implícitas del sistema operativo de manera normal. *

    –Phong Nguyen

    19 de septiembre de 2017 a las 6:34


  • No funcionará cuando compile Android con targetAndroidSDK 27 o superior.

    – sonida

    20 de marzo de 2018 a las 7:01

  • Funcionó para mí después de agregar al filtro de intenciones

    – Guillermo Magno

    13 de enero de 2020 a las 16:33

Avatar de usuario de Phong Nguyen
Phong Nguyen

Esta es una pregunta antigua y básica, pero muchos desarrolladores de Android ahora todavía están confundidos acerca de este problema, porque NO SE TOMAN TIEMPO PARA LEER CUIDADOSAMENTE LOS DOCUMENTOS

Vi que alguien compartió algunos enlaces y dijo que: “Esto ya no funcionará”es totalmente equivocado y incomprendido.

Sobre esta inquietud: “He visto esta respuesta que dice que BOOT_COMPLETED no se envía a la aplicación a menos que el usuario inicie su aplicación primero, después de la versión 3.1 de Android”.lea estas líneas (de documentos oficiales: https://developer.android.com/about/versions/android-3.1.html#launchcontrols) para entender correctamente:

  • Tenga en cuenta que un estado detenido de la aplicación no es lo mismo que un Estado detenido de la actividad. El sistema gestiona esos dos estados detenidos por separado.

  • Las aplicaciones están en un estado detenido cuando están instalado por primera vez pero aún no se ha lanzado y cuando son detenidos manualmente por el usuario (en Administrar aplicaciones). (Quieren decir parada forzosa Una aplicación)

ingrese la descripción de la imagen aquí

  1. Eso significa que un usuario debe iniciar la aplicación al menos una vez después de la instalación para activar la aplicación, entonces la aplicación puede recibir transmisiones implícitas del sistema operativo como de costumbre. (¡Solo una vez lanzando alguna vez!)

  2. “¿Alguna aplicación que se instala y nunca se abre aunque solo sea una vez ?”sí, son aplicaciones de spam y estafa, ¡esta técnica ayuda al usuario a evitar eso!

ADEMÁS, HASTA AHORA (Android Oreo 8.0)cuando Android limita el registro de transmisiones implícitas en Manifest (https://developer.android.com/about/versions/oreo/background.html#broadcasts), varias emisiones todavía están actualmente exentas de estas limitaciones.
Y BOOT_COMPLETED es el el primero mencionan!
(https://developer.android.com/guide/components/broadcast-exceptions.html)

Por cierto, esta es la mejor solución que encontré para esta pregunta:

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

<receiver android:name=".BootReceiver" android:enabled="true" android:exported="true">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
                <!--For HTC devices-->
                <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
            </intent-filter>
        </receiver>

Finalmente, lea el documento detenidamente y piense dos veces en el código una vez: ¡3!

  • pero la acción BOOT completó no funciona en un dispositivo plus. ¿Tiene alguna alternativa para eso?

    – Feroz Siddiqui

    5 de noviembre de 2018 a las 18:54

  • @FerozSiddiqui lo intentaste ?

    –Phong Nguyen

    6 de noviembre de 2018 a las 1:51

  • He probado en Orio y no funciona. Aunque muy informativo, gracias

    – Naga

    16 de noviembre de 2018 a las 13:42

  • No funciona en los teléfonos mi y one plus, lo verifiqué dos veces.

    – Feroz Siddiqui

    16 de septiembre de 2019 a las 9:36

  • Esto tiene que ver con la optimización de la batería. Si elimina su aplicación de la optimización de la masa, funcionará

    – Feroz Siddiqui

    16 de septiembre de 2019 a las 9:37

avatar de usuario de iman kazemayni
iman kazemayni

Algunas tabletas y dispositivos Android nuevos tienen una aplicación de seguridad por defecto. A veces, estas aplicaciones bloquean el modo de inicio automático. Un ejemplo de estas aplicaciones seguras es MyAsus manager. En este caso, el usuario debe agregar “permitir inicio automático” dentro del administrador de aplicaciones para todas las aplicaciones que deseen recibir este BOOT_COMPLETED

  • es posible hacer eso programáticamente?

    – Leodev

    13 mayo 2017 a las 17:22

  • lo mismo está sucediendo con los teléfonos Huiwei. BOOT_COMPLETED no se activa. Para que se dispare, usted como usuario debe ir a Configuración-> Aplicaciones-> Iniciar aplicación-> apagar para una aplicación necesaria.

    -Aleksandr Urzhumtcev

    26 de abril de 2020 a las 6:50

Avatar de usuario de Zar E Ahmer
Zar E Ahmer

Y para dispositivos Htc agregar com.htc.intent.action.QUICKBOOT_POWERON

    <receiver android:enabled="true" android:name=".receivers.BootUpReceiver">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
         </intent-filter>
    </receiver>

Para otros que todavía tienen un problema con esto como lo hice yo, si está depurando en un dispositivo que tiene un bloqueo de arranque (pin, patrón u otro), las versiones del sistema operativo> = 7.0 deben suscribirse al android.intent.action.LOCKED_BOOT_COMPLETED como se ilustra a continuación:

<receiver
    android:directBootAware="true"
    android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT" />
        <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    </intent-filter>
</receiver>

Puede encontrar la documentación en el siguiente enlace: https://developer.android.com/training/articles/direct-boot

Avatar de usuario de Arshid KV
Arshid KV

El problema es con el dispositivo. algunos dispositivos solo permiten que las aplicaciones internas reciban esta acción (ejemplo: Android 5.1).

puede agregar esto a su filtro de intención como solución alternativa

acción android:name="android.intent.action.USER_PRESENT"

Esto se activa después de que el usuario desbloquea el dispositivo.

avatar de usuario de doble pitido
pitido doble

El problema que experimenté fue que BOOT_COMPLETED y QUICKBOOT_POWERON juntos no siempre activó mi intención cuando apagué mi panel Android 6.0.1. He estado buscando en Internet durante bastante tiempo y encontré la solución agregando QUICKBOOT_POWEROFF al archivo de manifiesto.

Ver también:

El “arranque rápido” de HTC no transmite la intención BOOT_COMPLETED ni borra las intenciones del administrador de alarmas

¿Ha sido útil esta solución?