我正在开发适用于Android的地理围栏应用。在example的帮助下,从IntentService
到BroadcastReceiver
重构,如here所述,我现在有一个应用程序,如果应用程序在后台运行,可以按预期工作。我没有管理的是如何更新我的应用程序,例如如果应用程序被杀死的模型?应用程序被杀后,我的GeofenceReceiver
被触发/调用,但我的BroadcastReceiver
未收到MainActivity
消息。
在GeofenceReceiver
我做了类似的事情,如果我得到地理围栏过渡:
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);
正如我已经说过,如果应用程序处于后台,我的MainActivity
收到广播。如果我杀了应用程序,我的MainActivity
就不会收到广播。我用终端和logcat检查了它。
有什么想法吗?
答案 0 :(得分:0)
由于应用程序已被杀死,因此必须重新启动。可以使用BroadcastReceiver类中传递的上下文启动应用程序。请参阅下面的代码段,向您的活动发送geoFence数据。
--save-dev