262 votes

Comment lancer mon application au démarrage du téléphone sous Android ?

J'ai essayé d'utiliser l'exemple de code dans ce tutoriel mais elle semble dépassée et n'a pas fonctionné. Quelles modifications dois-je apporter et à quels fichiers pour que mon application démarre automatiquement à la fin du démarrage d'Android ?

337voto

Sean Schulte Points 1691

Tout d'abord, vous avez besoin de la permission dans votre AndroidManifest.xml :

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

Aussi, dans votre AndroidManifest.xml définissez votre service et écoutez les BOOT_COMPLETED action :

<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 recevra l'information de l'utilisateur. BOOT_COMPLETED action et de commencer 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 quand le téléphone démarre.

0 votes

Je n'ai pas demandé la permission de l'exécuter sur mon émulateur. Je n'ai pas utilisé le code exact. J'ai utilisé Intent serviceIntent = new Intent(Intent.FLAG_ACTIVITY_NEW_TASK) et j'ai gardé MyService comme 'Activity' plutôt que comme 'Service'. Mais je ne pense pas que cela fasse une différence. L'autorisation est-elle nécessaire pour l'exécuter sur un téléphone réel ? Je suis désolé si je pose une question stupide, je suis nouveau dans la programmation Android. Aussi, pouvez-vous me suggérer un tutoriel où je peux apprendre des choses de base sur Android, comme les activités, le contenu, etc.

8 votes

Activités : developer.Android.com/guide/topics/fondamentaux/activités.html Services : developer.Android.com/guide/topics/fundamentals/services.html Pour lancer votre application au démarrage du téléphone, vous devez enregistrer le service comme indiqué ci-dessus, puis utiliser startActivity() pour lancer votre application. Ce n'est pas une bonne idée de mettre un écran devant l'utilisateur s'il ne l'a pas demandé, cependant.

19 votes

Je voulais juste ajouter qu'il serait préférable d'utiliser Intent.ACTION_BOOT_COMPLETED au lieu de coder en dur la chaîne dans votre récepteur. De plus, vous devriez utiliser le nouveau Intent(context, MySystemService.class) lors de la création de l'Intent.

126voto

thrylos Points 49

C'est ainsi que l'on fait un activité commence à fonctionner après le redémarrage de l'appareil Android :

Insérez ce code dans votre AndroidManifest.xml dans le fichier <application> élément ( no au sein de la <activity> élément) :

<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>

Ensuite, créez une nouvelle classe yourActivityRunOnStartup (correspondant au android:name spécifié pour le <receiver> dans le manifeste) :

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);
        }
    }

}

Note : 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émarrera pas.

De même, les valeurs android:enabled , android:exported y android:permission en el <receiver> Les étiquettes ne semblent pas obligatoires. L'application reçoit l'événement sans ces valeurs. Voir l'exemple aquí .

0 votes

J'aime ce "raccourci" pour éviter de devoir faire un service local. Ce code appartient-il à la classe qui étend Application ? Peut-être dans onCreate() ?

2 votes

Il semble que ce paragraphe de code devrait être dans le cadre de onReceive() d'un BroadcastReceiver

2 votes

Ce code doit se trouver dans l'activité "yourActivityrRunOnStartup" qui étend la classe BroadcastReceiver et dans la méthode onReceive().

71voto

Haphazard Points 6804

Écoutez le ACTION_BOOT_COMPLETE et faites ce que vous devez faire à partir de là. Il existe un extrait de code ici.

Mise à jour :

Le lien original sur la réponse est en panne, alors, en fonction des commentaires, voici le code lié, parce que personne ne manquerait le code quand les liens sont en panne.

Dans AndroidManifest.xml (partie application) :

<receiver android:enabled="true" android:name=".BootUpReceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

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

...

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

...

public class BootUpReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
                Intent i = new Intent(context, MyActivity.class);  //MyActivity can be anything which you want to start on bootup...
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);  
        }

}

Source : https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup

0 votes

Dans quel fichier se trouve ce code : public class BootUpReceiver extends BroadcastReceiver

0 votes

Cela fonctionne, merci ! (a fonctionné sur Android 4.0.4 API niveau 15). Ouaip on est en 2017 et je dois encore développer pour Android 4.0.4.. :(

3 votes

Ne fonctionne pas sur Android 8.0 ! Fonctionne sur Android 4.0 par contre.

9voto

Tony Points 2319

En outre, si vous ne souhaitez pas modifier le code, vous pouvez utiliser une application comme AutoStart pour lancer une application Android au démarrage : AutoStart - Pas de racine

2voto

ole Points 11

La solution de Sean n'a pas fonctionné pour moi au départ (Android 4.2.2). J'ai dû ajouter une activité factice 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é notifié après les redémarrages suivants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X