He mirado por aquí por similares problemas, pero por alguna razón mi BroadcastReceiver nunca termina de recibir el android.intención.acción.BOOT_COMPLETED Intención.

Aquí está mi (relativa) de Android.Archivo De Manifiesto:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>    
<receiver android:name=".BootReceiver"
        android:enabled="true"
        android:exported="true"
        android:label="BootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>

        </intent-filter>
    </receiver>

Y Aquí es el verdadero Receptor.

public class BootReceiver extends BroadcastReceiver {
private static final String TAG="BootReceiver";

@Override public void onReceive(Context context,Intent intent){
    try{
        context.startService(new Intent(context,ConnectivityListener.class));
        Log.i(TAG,"Starting Service ConnectivityListener");
    }catch(Exception e){
        Log.e(TAG,e.toString());
    }
}
}

Gracias! Cualquier ayuda es muy apreciada

  • Ciego de adivinar – el receptor no está en el paquete principal y no hay package/mainpackage/BootReceiver.java pero en lugar package/mainpackage/receivers/BootReceiver.java, es decir, la ruta de acceso para el receptor está mal.
  • Gracias, no creo que de la comprobación de que, pero la suerte es sin duda el paquete por defecto.
  • Este mismo problema puede ocurrir cuando el receptor de la declaración contiene android:exportados=»true» sería crear un proceso nuevo todos juntos por el receptor. Su registrador (Registrar.i) imprimir los resultados en una nueva consola que usted no se de cuenta bajo android monitor (Android Studio). Yo recomendaría a quitar esta declaración, a menos que usted sabe lo que significa.
InformationsquelleAutor apmeyers1987 | 2011-02-19

9 Comentarios

  1. 164

    Puede emular todas emisión de acciones mediante la conexión a través de adb para el dispositivo y abrir un dispositivo de shell.

    Aquí vamos:

    • abrir una consola/terminal y navegar a /platform-tools
    • tipo adb shell o en linux/mac ./adb shell
    • en el tipo de la cáscara am broadcast -a android.intent.action.BOOT_COMPLETED o cualquier acción que desea fuego

    Hay un montón de agradable comandos que viene con el adb o el adb shell. Pruebe

    Saludos
    Flo

    edit: oh, maldita sea, quería que esta respuesta como una respuesta a la «tuvo que girar el teléfono encendido/apagado en cada momento». lo siento chicos

    • No, en absoluto lo que la pregunta inicial estaba preguntando (por lo que no upvote), no obstante, me pareció muy útil, gracias.
    • esto fue útil, gracias. Ahora una pregunta, llamar a este comando no funciona, pero no con un simple arranque. Alguna idea?
    • En mi equipo todo funciona como se espera. ¿Usted tiene el permiso en el archivo de manifiesto: <uses-permission android:name=»android.el permiso.RECEIVE_BOOT_COMPLETED» />
    • thnx tipo u ahorrado mucho tiempo
    • Para su referencia, la ejecución de este en bad en 4.2.2 realidad se reinicie el dispositivo
    • finalmente he sido capaz de reiniciar el emulador. Gracias!
    • La mayoría de utilidad aleatoria respuesta alguna
    • En las nuevas versiones de Android, usted necesita para ejecutar adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.mypackage.name. Sin la restricción de la emisión para su aplicación, el dispositivo realmente reiniciar.
    • En mi caso funciona sin «-p» Como este: radio am -un android.intención.acción.BOOT_COMPLETED com.mypackage.nombre
    • Sí, en mi caso así opción «-p» no se reconoce y funciona bien sin «-p».
    • Manera clásica de verificación de difusión, gracias
    • Me sale el siguiente error cuando estoy de emitir este comando Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED } java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=3566, uid=2000
    • Creo que se necesita un dispositivo de raíces o un emulador para enviar este.
    • Para la siguiente excepción: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED usted necesita cambiar adb root: ./adb root y, a continuación, adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p yourpackage.app se trabaja.

  2. 140

    Voy a postear esto en la esperanza de que sea útil para alguien que ha probado de todo, pero todavía no puede conseguir que se ejecute en el arranque después de la instalación o antes y no funciona más.

    Así, suponiendo que usted ha añadido el permiso:

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

    Y registrado su receptor:

    <receiver android:name="com.example.startuptest.StartUpBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    Y el código de las BroadcastReceiver:

    public class StartUpBootReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
            if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
                Log.d("startuptest", "StartUpBootReceiver BOOT_COMPLETED");
                ...
            }
        }
    }

    Comenzando con Android 3.1 todas las aplicaciones, en la instalación, se colocan en un «dejado de» del estado.(Este es el mismo estado que la aplicación termina después de que el usuario de la fuerza-se detiene la aplicación de la Configuración de la aplicación).

    BroadcastReceiver que no reciben BOOT_COMPLETED

    Mientras que en la «parada» del estado, la aplicación no se ejecute, por cualquier motivo, excepto por un manual de puesta en marcha de una actividad. (Es decir, no BroadcastRecevier(ACTION_PACKAGE_INSTALLED, BOOT_COMPLETED etc. se invoca, independientemente del tipo de evento para el que se ha registrado hasta que el usuario ejecuta la aplicación manualmente.)

    Esta es una decisión de diseño de Google para evitar que aplicaciones maliciosas. Google ha defendido que los usuarios deben iniciar una actividad desde el launcher en primer lugar, antes de que la aplicación puede hacer mucho. La prevención de BOOT_COMPLETED de ser entregados hasta que la actividad se puso en marcha es una consecuencia lógica de ese argumento.

    Una vez que un usuario ejecuta cualquier actividad en tu aplicación una sola vez, recibirá la BOOT_COMPLETED difusión después de todos los futuros botas.

    Más detalles acerca de esto:

    http://developer.android.com/about/versions/android-3.1.html#launchcontrols

    http://commonsware.com/blog/2011/07/05/boot-completed-regression.html

    http://devmaze.wordpress.com/2011/12/05/activating-applications/

    • +1 Esta es una gran respuesta y yo no era consciente de esto. Uno pertinentes poco de info, es que ya 3.1 «… el sistema añade FLAG_EXCLUDE_STOPPED_PACKAGES a todos de difusión de las intenciones.» que se traduce en la situación descrita en su respuesta – sin embargo – «Un servicio en segundo plano o aplicación de puede reemplazar este comportamiento mediante la adición de la FLAG_INCLUDE_STOPPED_PACKAGES flag a la difusión de las calidades que debe ser permitido para activar dejado de aplicaciones.» yo soy de probar esto, sin embargo :p (tomado de el enlace que publicó developer.android.com/about/versions/…)
    • Se debe aclarar que una vez que un usuario ejecuta cualquier actividad en tu aplicación una sola vez, recibirá la BOOT_COMPLETED difusión después de todos los futuros botas. La única salvedad a esto es que si el usuario hace Forzar Cierre de la aplicación, tendrá que iniciar manualmente de nuevo antes de que usted reciba BOOT_COMPLETED emisiones de nuevo.
    • Fuiste capaz de verificar el comportamiento de FLAG_INCLUDE_STOPPED_PACKAGES bandera ?
    • Usted no puede addFlags a menos que usted haya iniciado su actividad en el primer tiempo, por lo tanto esto no elude la necesidad de iniciar la aplicación por primera vez.
    • No se ha activado la aplicación permanezca activada, cuando se actualiza a una nueva versión? a través de app store o adb install -r ?
  3. 55

    Si la aplicación instalada en el exterior de almacenamiento(tarjeta SD), nunca recibirá Inicio de acción integral. Así que usted tiene que especificar android:installLocation="internalOnly" en el manifest tag.

    • wow, última respuesta es un diamante bajo una montaña 😀
    • finalmente he comprendido por qué mi aplicación no se inicia en el arranque en algunos teléfonos, mientras que en otros se trabaja OK – el asunto fue lo que el almacenamiento es seleccionado para instalar aplicaciones de forma predeterminada.
    • No trabajo para mí en 4.4.4 MIUI ROM (Oficial)
    • No funciona en mi lollipop 5.1.1 dispositivo también. No creo que sea posible utilizar BOOT_COMPLETED sin necesidad de iniciar la Actividad.
  4. 12

    Su <uses-permission> elemento necesidades inmediatas del niño de la <manifest> elemento, y su listado de código anterior sugiere que no lo es.

    Aquí es un proyecto de ejemplo lo que demuestra el uso de BOOT_COMPLETED.

    • Lo siento, fue un poco engañoso arriba ya que solo llevo fragmentos del Manifiesto porque Es muy largo, pero la utiliza-permiso es un hijo de <manifest>
    • +1 por mencionar la posición correcta de la <usa-permiso>-elemento. Tengo que mal por tener como hijo de <aplicaciones> que compila sin advertencias o errores, pero, por supuesto, no trabajo.
  5. 11

    Resulta que el receptor no estaba en la etiqueta del manifiesto. ¡Vaya! Gracias por su ayuda chicos! La peor parte de las pruebas de esto es tener que estar encendiendo y apagando el teléfono. 😛

    • como he leído en otros lugares por LO tanto, no es necesario reiniciar, pero sólo un caparazón: adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
    • stackoverflow.com/a/10105047/106248
    • Yo no entiendo hombre.. ¿Qué hiciste para que esto funcione
  6. 5

    Esta parece ser la vanguardia hilo para este problema, así que yo quería añadir una solución para mi C# colegas. He tratado en mi cerebro tratando de averiguar lo que estaba haciendo mal después de todo, tratando de aquí, fue en vano. Finalmente averiguar lo que estaba mal, y que difiere un poco de los consejos aquí para C# desarrollo de Mono. Básicamente, se reduce a algo que he aprendido de la manera difícil. Con C# NO MODIFICAR AndroidManifest.xml manualmente!

    Ver esta guía de referencia:
    Xamarin: Trabajar con AndroidManifest.xml

    Más directamente por este problema, aquí es cómo hacer esto.

    Primero, en las propiedades del proyecto, en la Ficha Manifiesto, hay una casilla de verificación lista para la elección de los permisos que desea ofrecer, uno de los cuales es RECEIVE_BOOT_COMPLETED. Compruebe que proporcionan estos permisos.

    En segundo lugar, usted necesita para poner el correcto etiquetas en su BroacastReceiver clase.

    [BroadcastReceiver]
    [IntentFilter(new String[]{ Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.LowPriority)]
    public class MyBootReceiver : BroadcastReceiver
    {
       public override void OnReceive(Context context, Intent intent)
       {
          //Do your boot work here, set alarms, show toasts, whatever
       }
    }

    La parte final de [IntentFilter()] tratar con prioridad no es necesario, sólo permite que otros de mayor prioridad cosas que hacer primero en el arranque, y es una buena práctica si su Aplicación no es una alta prioridad a la cosa.

    Como verás en el artículo vinculado, el uso de estas etiquetas en el código hará que el AndroidManifest.xml archivo que se crea al momento de la construcción, con todo lo que de la manera que debe ser. Lo que encontré fue que al modificar el manifiesto de forma manual para incluir el receptor de la etiqueta, el sistema se fue haciendo que se vea la clase de un nivel demasiado profundo, arrojando así un ClassNotFound excepción. Ella estaba tratando de crear una instancia de [Nombres].[Nombres].[BroadcastReceiver] que estaba mal. Y se fue haciendo, porque de el manual de manifiesto ediciones.

    De todos modos, espero que esto ayude.

    También, otro consejo rápido con la herramienta adb. Si usted desea conseguir un fácil de leer la versión de la sesión, intente esto:

    C:\Android\platform-tools\adb logcat >> C:\log.txt

    Esto va a volcar el logcat a un archivo de texto que se puede abrir y leer un poco más fácil que en la ventana del símbolo del sistema. Hace cortar y pegar de las cosas un poco más fácil también.

    • No lo has probado en MIUI de Xiaomi?
  7. 1

    Perteneciente a algunos de los dispositivos con Android Kitkat 4.4.4_r2/r1.

    Parece ser un bug en Android que hacen android.intención.acción.BOOT_COMPLETED no está emitiendo.

    Ver:

    ERROR de INICIO de decisiones del Gestor de Paquetes de Servicio listo

    En la mayoría de los casos esto no es la respuesta a tus problemas, más probablemente, porque los permisos, etc), pero si usted está ejecutando Kitkat, a continuación, puede echar un vistazo y ver si este parece ser el caso para usted.

    He tenido este problema y android.intención.acción.BOOT_COMPLETED que simplemente no se transmite algunas de las veces que se había puesto en marcha!

    • En la versión de Android 5.1 también el mismo problema es ther??
    • Entonces, ¿qué se supone que vamos a hacer acerca de eso?
  8. 0

    sobre la adición de <category android:name="android.intent.category.HOME" /> esto a mi archivo de manifiesto de solucionar mi problema y funciona.

    <receiver android:name=".BroadCastRecieverClass">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </receiver>
  9. 0

    Otras respuestas aquí ya cubierto perfectamente cómo implementar la Emisión Receptor de modo que se va a trabajar, sin embargo todavía tenía problemas con la recepción de la BOOT_COMPLETED Intención hasta que me di cuenta de la aplicación en realidad estaba trabajando cuando se inicia desde el teléfono/emulador pulsando sobre el icono de la aplicación.
    Cada vez que inicio mi app con la depuración y ejecutar comandos de Android Studio el BOOT_COMPLETED Intención no será entregada, a menos que se abre la aplicación y ejecución.

    Espero que esto pueda ayudar a alguien que, como yo, estaba luchando durante horas con este problema.
    Por otra parte, si alguien tiene una explicación para este comportamiento, me encantaría saber más sobre él.

Dejar respuesta

Please enter your comment!
Please enter your name here