2016-07-24 17 views
0

Meine App plant Alarme mit AlarmManager und einer BroadcastReceiver-Klasse.Werden BroadcastReceiver ausgelöst, wenn die App vollständig ausgeschaltet ist?

Es funktioniert, wenn die App läuft oder Hintergrund, aber wenn es vollständig getötet wird, scheint es, dass das Ereignis nicht ausgelöst wird.

Der Empfänger ruft einen IntentService auf, der die Google Maps-REST-API mit einigen Parametern aufruft und anschließend die formatierte Ausgabe in einer Benachrichtigung anzeigt. Der Dienst tut dies, ohne AsyncTask zu verwenden, da es bereits ein Hintergrundthread ist.

Gibt es auch eine gute Möglichkeit zu überprüfen, ob der Empfänger oder Dienst aufgerufen wird, wenn sich die Anwendung nicht in Debug befindet?

+0

Wie haben Sie den Empfänger registrieren? –

+0

Es ist im Manifest. Ich bin nicht sicher, welcher Teil bricht, um ehrlich zu sein, ob es der Empfänger, der Datendownload, der Absichtsdienst oder die Benachrichtigungslogik ist. Es funktioniert manchmal, aber zu anderen Zeiten nicht .. rate müssen einen Logger erstellen, der in DB schreiben und sehen, welche Logik tatsächlich ausgelöst wird. – allanx2000

Antwort

2

Wenn Ihre BroadcastReceiver Einstellungen empfangen muss, selbst wenn die App beendet wird, sollten Sie sich über AndroidManifest.xml zu den gewünschten Absichten anmelden.

Auf diese Weise wird die BroadcastReceiver unabhängig von Ihrer App Leben cicle sein.

Auf diese Weise Ihre BroadcastReceiver wird, sobald die gewünschte Absicht durch eine App

AndroidManifest.xml

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

    <application> 
     .... 
     <receiver android:name=".MyCustomBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="com.example.mytestapp.MY_CUSTOM_INTENT" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

MyCustomBroadcastReceiver.java

ausgestrahlt wurde automatisch von Android benachrichtigt
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("com.example.mytestapp.MY_CUSTOM_INTENT")) { 
        // DO YOUR STUFF 
       } 
      } 
     } 
    } 
} 

Erstellen der Alarm Intent

Dann, wenn Ihr Alarmmanager erstellen, verwenden Sie den Code unten:

Intent intentForAlarmManager = new Intent("com.example.mytestapp.MY_CUSTOM_INTENT"); 

PendingIntent.getBroadcast(/* CONTEXT */, /* ID */ , intentForAlarmManager, /* FLAGS */));