Android-Startdienst zur Startzeit

Ich muss einen Dienst beim Booten starten. Ich habe viel gesucht. Sie sprechen über Rundfunkempfänger. Da ich neu in der Android-Entwicklung bin, habe ich kein klares Bild über Dienste auf Android bekommen. Bitte geben Sie einen Quellcode an.

   

    Erstellen Sie einen BroadcastReceiver und registrieren Sie ihn, um ACTION_BOOT_COMPLETED zu empfangen. Sie benötigen außerdem die Berechtigung RECEIVE_BOOT_COMPLETED .

    Lesen: Abhören und Senden von globalen Nachrichten und Einstellen von Alarmen

    Ihr Empfänger:

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

    Ihre AndroidManifest.xml:

     < ?xml version="1.0" encoding="utf-8"?>                   

    Es ist möglich, einen eigenen Anwendungsdienst zu registrieren, der automatisch startet, wenn das Gerät gestartet wurde. Sie benötigen dies zum Beispiel, wenn Sie Push-Ereignisse von einem HTTP-Server erhalten möchten und den Benutzer informieren möchten, sobald ein neues Ereignis eintritt. Der Benutzer muss die Aktivität nicht manuell starten, bevor der Dienst gestartet wird …

    Es ist ganz einfach. Gib zunächst deiner App die Berechtigung RECEIVE_BOOT_COMPLETED. Als nächstes müssen Sie einen BroadcastReveiver registrieren. Wir nennen es BootCompletedIntentReceiver.

    Deine Manifest.xml sollte nun wie folgt aussehen:

                

    Als letzten Schritt müssen Sie den Empfänger implementieren. Dieser Receiver startet gerade Ihren Hintergrunddienst.

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

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

    Bei den meisten der hier geposteten Lösungen fehlt ein wichtiges Teil: Wenn Sie es ohne Wakelock machen, besteht die Gefahr, dass Ihr Dienst getötet wird, bevor die Verarbeitung abgeschlossen ist. Habe diese Lösung in einem anderen Thread gesehen und hier auch geantwortet.

    Sie müssen zuerst eine Wecksperre erhalten. Zum Glück gibt uns die Support-Bibliothek eine class , um dies zu tun:

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

    Stellen Sie in Ihrem Service sicher, dass die Wake-Sperre aufgehoben wird:

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

    Vergessen Sie nicht, die WAKE_LOCK-Berechtigung hinzuzufügen und Ihren Empfänger im Manifest zu registrieren:

       ...      

    Sie sollten sich sowohl für BOOT_COMPLETE als auch für REBOOT registrieren

           

    Registriere deinen erstellten Dienst auch im Manifest und nutzt die Berechtigung als

             

    und dann in Braodcast Reciever rufen Sie Ihren Dienst an

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

    Registrieren Sie zunächst einen Empfänger in Ihrer Datei manifest.xml:

            

    und dann eine Sendung für diesen Empfänger schreiben wie:

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