Как я передаю данные BroadcastReceiver до запускаемого Действия?

У меня есть приложение Android, которое должно быть разбужено эпизодически в течение дня.

Чтобы сделать это, я использую AlarmManager, чтобы создать PendingIntent и иметь этот триггер BroadcastReceiver. Этот BroadcastReceiver затем запускает Действие для обеспечения UI к переднему плану.

Все вышеупомянутое, кажется, работает, в котором Действие запускает себя правильно; но я хотел бы, чтобы BroadcastReceiver уведомил Действие, что это было запущено предупреждением (в противоположность тому, чтобы быть запущенным пользователем). Чтобы сделать это, я пробую, от onReceive () метод BroadcastReceiver для установки переменной в пакете отдельно оплачиваемых предметов намерения, таким образом:

    Intent i = new Intent(context, MyActivity.class);
    i.putExtra(wakeupKey, true);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);

В onResume () метод моего Действия, я затем ищу существование этой логической переменной:

protected void onResume() {
    super.onResume();

    String wakeupKey = "blah";      
    if (getIntent()!=null && getIntent().getExtras()!=null)
        Log.d("app", "onResume at " + System.currentTimeMillis() + ":" + getIntent().getExtras().getBoolean(wakeupKey));
    else
        Log.d("app", "onResume at " + System.currentTimeMillis() + ": null");
}

getIntent () .getExtras () вызов в onResume () всегда возвращает пустой указатель - я, кажется, не могу передать любые отдельно оплачиваемые предметы через вообще в этом пакете.

Если я использую тот же метод для привязки отдельно оплачиваемых предметов с PendingIntent, который инициировал BroadcastReceiver однако, отдельно оплачиваемые предметы проникают очень хорошо.

Кто-либо может сказать мне, что является особенным в передаче пакета от BroadcastReceiver до Действия, в противоположность передаче пакета от Действия до BroadcastReceiver? Я боюсь, что могу делать что-то очень очень очевидная несправедливость здесь...

9
задан Tom Hume 11 April 2010 в 11:36
поделиться

2 ответа

Вместо getIntent (). GetExtras (). GetBoolean (wakeupKey) более привычно писать getIntent (). GetBooleanExtra (wakeupKey, defaultValue) . Я не могу быть уверен, связано ли это с вашей проблемой, но есть некоторые вещи, связанные с созданием пакета внутри getExtras (), в которых я не уверен, так что в любом случае, возможно, стоит попробовать.

2
ответ дан 4 December 2019 в 06:26
поделиться

Этот BroadcastReceiver затем запускает действие , чтобы вывести пользовательский интерфейс на передний план .

Это может быть суть вашей проблемы. Попробуйте переопределить onNewIntent () и посмотреть, есть ли у переданного ему Intent дополнительных. Если да, то это из-за способа настройки действия в манифесте (например, вы используете singleTop ) и того факта, что в данном конкретном случае действие уже существовало.

Вы также можете подумать об избавлении от i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); и посмотреть, изменится ли это.

В результате то, что вы делаете - добавление лишнего в Intent для startActivity () - должно работать нормально. Фактически, вы можете увидеть примеры этого здесь . Это наводит на мысль, что это что-то необычное в действии (например, singleTop ) или способе вызова действия (например, FLAG_ACTIVITY_NEW_TASK ).

РЕДАКТИРОВАТЬ:

Поскольку мои первые снимки не сработали, и учитывая ваш "любопытный" комментарий выше ...

Это немного похоже на PendingIntent - с ними, если только вы предпринимаете шаги, вы не сможете обновлять экстры.

По прихоти, попробуйте добавить второй к вашей активности в манифесте, просто на какой-то уникальной строке действия, и попробуйте начать свою деятельность с вашего приемника, используя это. Или просто добавьте строку действия в ваше намерение , которое получатель использует для startActivity () , не вмешиваясь в манифест.

5
ответ дан 4 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: