Неправильный PendingIntent запускается после нажатия клавиши home
У меня есть два (или более) виджета, например A и B, которые должны запускать одно и то же действие, передавая их appWidgetId
в Intent
экстры к действию. Это прекрасно работает после установки приложения при первом запуске из любого виджета (действие получает правильный appWidgetId
). Он также отлично работает, если я нажимаю кнопку назад после запуска активности и запускаю активность из другого виджета. Однако, если я запускаю действие из виджета A, нажмите кнопку home, а затем запустите действие из виджета B (или C, или D...) он запускается с помощью A appWidgetId
. Я не знаю, как это исправить. Вот как я объявляю свой PendingIntent
:
Intent intent = new Intent(context, WidgetActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setAction(this.getClass().getName() + System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Если я правильно понимаю, я успешно настраиваю уникальные PendingIntents для каждого виджета. Любая помощь очень ценится!
EDIT : Принятый ответ на Этот вопрос предполагает, что:
Я считаю, что проблема в том, что у вас есть PendingIntent, который отличается только дополнительным. PendingIntents кэшируются, так что если вы используете два с одинаковыми действиями и данными, они будут перезаписывать друг друга.
Однако мой код создает рандомизированные действия для выполнения, и поэтому я думаю, что мои PendingIntents отличаются не только дополнительными функциями
1 ответ:
Похоже, мне нужно освежить события жизненного цикла моей деятельности. Ответом был следующий код, введенный в мою деятельность:
Проблема заключалась в том, что при нажатии кнопки Home действие удерживалось на исходном@Override protected void onNewIntent(Intent intent) { setIntent(intent); super.onNewIntent(intent); }
Intent
, который запустил его. Затем, когда другой виджет запускал действие, исходное намерение использовалось повторно. Приведенный выше код просто заменяет первоначальное намерение новым и продолжает работу с оставшимися событиями жизненного цикла.