У меня есть приложение 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? Я боюсь, что могу делать что-то очень очень очевидная несправедливость здесь...
Вместо getIntent (). GetExtras (). GetBoolean (wakeupKey)
более привычно писать getIntent (). GetBooleanExtra (wakeupKey, defaultValue)
. Я не могу быть уверен, связано ли это с вашей проблемой, но есть некоторые вещи, связанные с созданием пакета внутри getExtras (), в которых я не уверен, так что в любом случае, возможно, стоит попробовать.
Этот BroadcastReceiver затем запускает действие , чтобы вывести пользовательский интерфейс на передний план .
Это может быть суть вашей проблемы. Попробуйте переопределить onNewIntent ()
и посмотреть, есть ли у переданного ему Intent
дополнительных. Если да, то это из-за способа настройки действия в манифесте (например, вы используете singleTop
) и того факта, что в данном конкретном случае действие уже существовало.
Вы также можете подумать об избавлении от i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
и посмотреть, изменится ли это.
В результате то, что вы делаете - добавление лишнего в Intent
для startActivity ()
- должно работать нормально. Фактически, вы можете увидеть примеры этого здесь . Это наводит на мысль, что это что-то необычное в действии (например, singleTop
) или способе вызова действия (например, FLAG_ACTIVITY_NEW_TASK
).
РЕДАКТИРОВАТЬ:
Поскольку мои первые снимки не сработали, и учитывая ваш "любопытный" комментарий выше ...
Это немного похоже на PendingIntent
- с ними, если только вы предпринимаете шаги, вы не сможете обновлять экстры.
По прихоти, попробуйте добавить второй
к вашей активности в манифесте, просто на какой-то уникальной строке действия, и попробуйте начать свою деятельность с вашего приемника, используя это. Или просто добавьте строку действия в ваше намерение
, которое получатель использует для startActivity ()
, не вмешиваясь в манифест.