Как обновить закрытое / убитое приложение из 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)
 }
Другие вопросы по тегам