Android BroadcastReceiver beim Start – läuft weiter, wenn sich die Aktivität im Hintergrund befindet

Ich überwache eingehende SMS.

Meine App funktioniert perfekt mit einem BroadcastReceiver . Es funktioniert jedoch von einer Aktivität und möchte gerne den BroadcastReceiver die ganze Zeit laufen lassen (und nicht nur wenn meine Aktivität läuft).

Wie kann ich das erreichen? Ich habe den Lebenszyklus des BroadcastReceiver durchgesehen, aber alles, was in der Dokumentation erwähnt wird, ist, dass der Lebenszyklus auf die OnReceive-Methode beschränkt ist, nicht der Lebenszyklus des BroadcastReceivers, der auf eingehende SMS prüft.

Wie kann ich das hartnäckig machen?

Vielen Dank

Sie müssen einen Empfänger im Manifest mit dem Aktionsnamen android.intent.action.BOOT_COMPLETED definieren .

       

Stellen Sie sicher, dass auch die vollständigen Boot-Berechtigungen enthalten sind.

  

Verwenden Sie Service dafür, damit alles bestehen bleibt. Verwenden Sie Empfänger, um Boot Up-Ereignisse zu empfangen, um den Dienst beim Systemstart neu zu starten.

Code zum Starten des Dienstes beim Hochfahren. Machen Sie Service Ihre Arbeit der Überprüfung von SMS oder was auch immer Sie wollen. Sie müssen Ihre Arbeit in MyPersistingService um es selbst zu definieren.

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class ServiceStarter extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent("com.prac.test.MyPersistingService"); i.setClass(context, MyPersistingService.class); context.startService(i); } } 

Service oder Boot Completed ist nicht obligatorisch

In der Tat müssen Sie keinen Service implementieren oder sich bei android.intent.action.BOOT_COMPLETED registrieren

Einige Beispiele zeigen, wie Sie einen BroadcastReceiver registrieren oder die Registrierung BroadcastReceiver wenn eine Aktivität erstellt und zerstört wird. Dies ist jedoch nützlich für Absichten, die Sie nur erwarten, wenn die App geöffnet wird (z. B. für die interne Kommunikation zwischen Dienst / Aktivität).

Im Fall einer SMS möchten Sie jedoch immer die Absicht hören (und nicht nur, wenn Ihre App geöffnet ist).

Es geht auch anders

Sie können eine class erstellen class die BroadcastReceiver und sich über AndroidManifest.xml für gewünschte Absichten AndroidManifest.xml . Auf diese Weise ist der BroadcastReceiver unabhängig von Ihrer Aktivität (und hängt nicht vom Lebenszyklus der Aktivität ab)

Auf diese Weise wird Ihr BroadcastReceiver automatisch von Android benachrichtigt, sobald eine SMS eintrifft, selbst wenn Ihre App geschlossen ist.

AndroidManifest.xml

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

MeinCustomBroadcastReceiver.java

 public class MyCustomBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent != null) { String action = intent.getAction(); if(action != null) { if(action.equals("android.provider.Telephony.SMS_RECEIVED")) { // DO YOUR STUFF } else if (action.equals("ANOTHER ACTION")) { // DO ANOTHER STUFF } } } } } 

Anmerkungen

Sie können AndroidManifest andere Intent-Filter hinzufügen und alle in demselben BroadcastReceiver .

Starten Sie einen Dienst nur, wenn Sie eine lange Aufgabe ausführen. Sie müssen nur eine Benachrichtigung anzeigen oder eine database aktualisieren, verwenden Sie einfach den obigen Code.