Как обновить закрытое / убитое приложение из IntentReceiver?
Я работаю над приложением геозоны для Android. С помощью примера из Google и рефакторинга из IntentService
в BroadcastReceiver
как описано здесь, теперь у меня есть приложение, которое работает, как ожидалось, если приложение находится в фоновом режиме. Что мне не удалось сделать, так это как я могу обновить свое приложение, например модель, если приложение убито? мой 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.
Есть идеи?
1 ответ
Поскольку приложение было убито, его нужно запустить снова. Приложение может быть запущено с использованием контекста, переданного внутри вашего класса BroadcastReceiver. Посмотрите фрагмент ниже, чтобы отправить вашей активности данные GeoFence.
@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)
}