Tout d'abord, vous avez besoin de l'autorisation dans votre AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
De plus, dans votre AndroidManifest.xml
, définissez votre service et écoutez l' action 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>
Ensuite, vous devez définir le récepteur qui obtiendra l' action BOOT_COMPLETED et démarrer votre service.
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);
}
}
}
Et maintenant, votre service devrait fonctionner au démarrage du téléphone.
Intent.ACTION_BOOT_COMPLETED
au lieu de coder en dur la chaîne dans votre récepteur. Vous devez également utiliser le nouveauIntent(context, MySystemService.class)
constructeur lors de la création de l'intention.Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
sur lapublic class
ligne. Des idées?Voici comment démarrer une activité après le redémarrage de l'appareil Android:
Insérez ce code dans votre
AndroidManifest.xml
fichier, à l'intérieur de l'<application>
élément ( pas à l'intérieur de l'<activity>
élément):Créez ensuite une nouvelle classe
yourActivityRunOnStartup
(correspondant à celleandroid:name
spécifiée pour l'<receiver>
élément dans le manifeste):Remarque: L'appel
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
est important car l'activité est lancée à partir d'un contexte extérieur à l'activité. Sans cela, l'activité ne démarre pas.En outre, les valeurs
android:enabled
,android:exported
etandroid:permission
dans l'<receiver>
étiquette ne semblent pas obligatoire. L'application reçoit l'événement sans ces valeurs. Voir l'exemple ici .la source
Application
? Peut-être à l'intérieuronCreate()
?onReceive()
unBroadcastReceiver
Écoutez ACTION_BOOT_COMPLETE et faites ce dont vous avez besoin à partir de là. Il y a un extrait de code ici.
Mettre à jour:
Le lien d'origine sur la réponse est en baisse, donc sur la base des commentaires, il s'agit ici du code lié, car personne ne manquerait jamais le code lorsque les liens sont en baisse.
Dans AndroidManifest.xml (partie application):
...
...
Source: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup
la source
De plus, vous pouvez utiliser une application comme AutoStart si vous ne voulez pas modifier le code, pour lancer une application Android au démarrage: AutoStart - Pas de racine
la source
La solution de Sean n'a pas fonctionné pour moi au départ (Android 4.2.2). J'ai dû ajouter une activité fictive au même projet Android et exécuter l'activité manuellement sur l'appareil au moins une fois. Ensuite, la solution de Sean a commencé à fonctionner et le BroadcastReceiver a été averti après les redémarrages ultérieurs.
la source
Je voudrais ajouter un point dans cette question à laquelle je faisais face depuis quelques jours. J'ai essayé toutes les réponses mais celles-ci ne fonctionnaient pas pour moi. Si vous utilisez la version Android 5.1, veuillez modifier ces paramètres.
Si vous utilisez Android version 5.1, vous devez désélectionner (Restreindre au lancement) dans les paramètres de l'application.
paramètres> application> votre application> Restreindre au lancement (désélectionner)
la source
Une autre approche consiste à utiliser
android.intent.action.USER_PRESENT
plutôtandroid.intent.action.BOOT_COMPLETED
qu'à éviter les ralentissements pendant le processus de démarrage. Mais ce n'est quetrue
si l'utilisateur a activé l'écran de verrouillage - sinon cette intention n'est jamais diffusée.Blog de référence - Le problème de l'intention ACTION_USER_PRESENT d'Android
la source