2017-02-16 1 views
1

Ich arbeite an einer Geofence App für Android. Mit Hilfe der example von Google und Refactoring von IntentService bis BroadcastReceiver wie beschrieben here Ich habe jetzt eine App, die wie erwartet funktioniert, wenn App im Hintergrund ist. Was ich nicht geschafft habe ist, wie ich meine App z. ein Modell, wenn die App getötet wird? Meine GeofenceReceiver wird ausgelöst/angerufen, während die App getötet wird, aber meine BroadcastReceiver Nachricht wird nicht in meinem MainActivity empfangen.Wie aktualisiert man die geschlossene/getötete App von IntentReceiver?

In meinem GeofenceReceiver ich so etwas tun, wenn ich einen Geofence-Übergang erhalten:

1:

Intent notificationIntent = new Intent(context, MainActivity.class); 
    notificationIntent.putStringArrayListExtra(Constants.TRIGGERING_GEOFENCE_IDS_KEY, triggeringIDs); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(notificationIntent); 

    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setSmallIcon(R.mipmap.ic_launcher) 
      .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher)) 
      .setColor(Color.RED) 
      .setContentTitle(notificationDetails) 
      .setContentText(context.getString(R.string.geofence_transition_notification_text)) 
      .setPriority(NotificationCompat.PRIORITY_HIGH) 
      .setContentIntent(resultPendingIntent); 
    builder.setAutoCancel(true); 

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(0, builder.build()); 

2:

Intent broadcastIntent = new Intent(ACTION); 
     broadcastIntent.putExtra("resultCode", Activity.RESULT_OK); 
     broadcastIntent.putExtra(Constants.BUNDLE_KEY, bundle); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(broadcastIntent); 

Wie ich bereits gesagt, die Sendung empfangen wird in meiner MainActivity, wenn die App im Hintergrund ist. Wenn ich die App kille, wird die Sendung nicht in meinem MainActivity empfangen. Ich habe das mit Terminal und Logcat überprüft.

Irgendwelche Ideen?

+0

Also was meinst du ist erhalten Sie eine Sendung in Ihrem BroadcastReceiver, aber Sie bekommen es nicht in Ihrer Haupttätigkeit? – cafebabe1991

+0

@ cafebabe1991 Grundsätzlich ja. Mein GeofenceReceiver wird immer noch für Geofence-Übergänge aufgerufen, selbst wenn die App beendet wird, aber dann kann ich nicht etwas an meine MainActivity senden. – wman

Antwort

0

Da die App beendet wurde, muss sie erneut gestartet werden. Die App kann mit dem Kontext gestartet werden, der in der BroadcastReceiver-Klasse übergeben wurde. Sehen Sie sich das folgende Snippet an, um Ihrer Aktivität die GeoFence-Daten zu senden.

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent i = new Intent(); 
    i.setClassName("com.test", "com.test.MainActivity"); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.putExtra("data", geoData); 
    context.startActivity(i) 
} 
+0

Ich versuchte es mit Absicht BroadcastIntent = neue Absicht (Kontext, MainActivity.class); broadcastIntent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); broadcastIntent.putExtra ("resultCode", Activity.RESULT_OK); broadcastIntent.putExtra (Constants.BUNDLE_KEY, Bündel); context.startActivity (broadcastIntent); Aber das bedeutet, dass meine App im Vordergrund steht. Ich will das nicht. Ich möchte nur ein Modell aktualisieren, um den lastPosition Geofence zu aktualisieren. – wman

+0

Sie müssen dann Ihren Dienst starten und Ihr Dienst wird die Daten aktualisieren. – cafebabe1991

Verwandte Themen