Android – Démarrage du service au démarrage

J'ai besoin de démarrer un service au démarrage. J'ai cherché beaucoup. Ils parlent de Broadcastreceiver. Comme je suis nouveau sur le développement d'Android, je n'ai pas eu une image claire des services sur Android. Veuillez fournir un code source.

  • Application Android créant deux icônes de lancement
  • Comment activer l'option AutoStart pour mon application dans l'application de sécurité du téléphone Xiaomi par programme dans Android
  • Mode de lancement Android OneTask ou singleInstance?
  • Android capturant la vidéo en ralenti
  • Démarrez l'application Android sans activité
  • Android capte la vidéo en ralenti en utilisant CamcorderProfile
  • 7 Solutions collect form web for “Android – Démarrage du service au démarrage”

    Créez un BroadcastReceiver et enregistrez-le pour recevoir ACTION_BOOT_COMPLETED . Vous avez également besoin de l'autorisation RECEIVE_BOOT_COMPLETED .

    Lire: écouter et diffuser des messages globaux et définir des alarmes

    Votre destinataire:

     public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, YourService.class); context.startService(myIntent); } } 

    Votre AndroidManifest.xml:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.broadcast.receiver.example" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name=".BR_Example" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- Declaring broadcast receiver for BOOT_COMPLETED event. --> <receiver android:name=".MyReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> <!-- Adding the permission --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> </manifest> 

    Il est possible d'enregistrer votre propre service d'application pour démarrer automatiquement lorsque l'appareil a été démarré. Vous avez besoin de cela, par exemple, lorsque vous souhaitez recevoir des événements push à partir d'un serveur http et souhaitez informer l'utilisateur dès qu'un nouvel événement se produit. L'utilisateur ne doit pas démarrer l'activité manuellement avant le démarrage du service …

    C'est assez simple. Donnez d'abord à votre application la permission RECEIVE_BOOT_COMPLETED. Ensuite, vous devez enregistrer un BroadcastReveiver. On l'appelle BootCompletedIntentReceiver.

    Votre Manifest.xml devrait maintenant ressembler à ceci:

     <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jjoe64"> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application> <receiver android:name=".BootCompletedIntentReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name=".BackgroundService"/> </application> </manifest> 

    Comme dernière étape, vous devez implémenter le récepteur. Ce récepteur commence simplement votre service d'arrière-plan.

     package com.jjoe64; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.jjoe64.BackgroundService; public class BootCompletedIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent pushIntent = new Intent(context, BackgroundService.class); context.startService(pushIntent); } } } 

    À partir de http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html

    La plupart des solutions affichées ici manquent d'une pièce importante: le faire sans verrou de réveil couvre le risque que votre service soit tué avant qu'il ne soit terminé. J'ai vu cette solution dans un autre fil, répondant ici aussi.

    Vous devez d'abord obtenir un verrouillage de réveil. Heureusement, la bibliothèque Support nous donne une classe pour faire ceci:

     public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This is the Intent to deliver to our service. Intent service = new Intent(context, SimpleWakefulService.class); // Start the service, keeping the device awake while it is launching. Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); startWakefulService(context, service); } } 

    Ensuite, dans votre service, assurez-vous de relâcher le verrouillage du réveil:

      @Override protected void onHandleIntent(Intent intent) { // At this point SimpleWakefulReceiver is still holding a wake lock // for us. We can do whatever we need to here and then tell it that // it can release the wakelock. ... Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); SimpleWakefulReceiver.completeWakefulIntent(intent); } 

    N'oubliez pas d'ajouter l'autorisation WAKE_LOCK et d'enregistrer votre récepteur dans le manifeste:

     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> ... <service android:name=".SimpleWakefulReceiver"> <intent-filter> <action android:name="com.example.SimpleWakefulReceiver"/> </intent-filter> </service> 

    Vous devez vous inscrire à BOOT_COMPLETE ainsi que REBOOT

     <receiver android:name=".Services.BootComplete"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.REBOOT"/> </intent-filter> </receiver> 

    Enregistrez également votre service créé dans Manifest et utilise-permission comme

     <application ...> <service android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MyBroadcastReciver"/> </intent-filter> </service> </application> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

    Et ensuite, en fonte de braod, recevez votre service

     public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, MyService.class); context.startService(myIntent); } } 

    Enregistrez d'abord un récepteur dans votre fichier manifest.xml:

      <receiver android:name="com.mileagelog.service.Broadcast_PowerUp" > <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> 

    Puis écris une émission pour ce récepteur comme:

     public class Broadcast_PowerUp extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_POWER_CONNECTED)) { Toast.makeText(context, "Service_PowerUp Started", Toast.LENGTH_LONG).show(); } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) { Toast.makeText(context, "Service_PowerUp Stoped", Toast.LENGTH_LONG) .show(); } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.