¿Cómo inicio mi aplicación cuando el teléfono se inicia en Android?

Resuelto Poojan asked hace 54 años • 0 respuestas

Intenté usar el código de muestra en este tutorial pero parece desactualizado y no funcionó. Entonces, ¿qué cambios tengo que hacer y en qué archivos para que mi aplicación se inicie automáticamente cuando Android termine de iniciarse?

Poojan avatar Jan 01 '70 08:01 Poojan
Aceptado

Primero, necesitas el permiso en tu AndroidManifest.xml:

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

Además, en tu AndroidManifest.xml, define tu servicio y escucha la acción BOOT_COMPLETED :

<service android:name=".MyService" android:label="My Service">
    <intent-filter>
        <action android:name="com.myapp.MyService" />
    </intent-filter>
</service>

<receiver
    android:name=".receiver.StartMyServiceAtBootReceiver"
    android:label="StartMyServiceAtBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Luego debe definir el receptor que obtendrá la acción BOOT_COMPLETED e iniciará su servicio.

public class StartMyServiceAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }
    }
}

Y ahora su servicio debería estar ejecutándose cuando se inicie el teléfono.

Sean Schulte avatar Jun 17 '2011 21:06 Sean Schulte

Así es como hacer que una actividad comience a ejecutarse después de reiniciar el dispositivo Android:

Inserte este código en su AndroidManifest.xmlarchivo, dentro del <application>elemento ( no dentro del <activity>elemento):

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

<receiver
    android:enabled="true"
    android:exported="true" 
    android:name="yourpackage.yourActivityRunOnStartup"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

</receiver>

Luego cree una nueva clase yourActivityRunOnStartup(que coincida con la android:nameespecificada para el <receiver>elemento en el manifiesto):

package yourpackage;

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

public class yourActivityRunOnStartup extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }

}

Nota: La llamada i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);es importante porque la actividad se lanza desde un contexto externo a la actividad. Sin éste, la actividad no se iniciará.

Además, los valores android:enabledy en la etiqueta no parecen obligatorios android:exported. La aplicación recibe el evento sin estos valores. Vea el ejemplo aquí .android:permission<receiver>

thrylos avatar Apr 10 '2014 14:04 thrylos