¿Cómo inicio mi aplicación cuando el teléfono se inicia en Android?
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?
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.
Así es como hacer que una actividad comience a ejecutarse después de reiniciar el dispositivo Android:
Inserte este código en su AndroidManifest.xml
archivo, 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:name
especificada 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:enabled
y en la etiqueta no parecen obligatorios android:exported
. La aplicación recibe el evento sin estos valores. Vea el ejemplo aquí .android:permission
<receiver>