Неправильный PendingIntent запускается после нажатия клавиши home - PullRequest
3 голосов
/ 01 ноября 2011

У меня есть два (или более) виджета, например, A и B, которые должны запускать одно и то же действие, передавая их appWidgetId в дополнениях Intent к действию.Это прекрасно работает после установки приложения при первом запуске с любого из виджетов (активность получает правильный appWidgetId).Это также работает нормально, если я нажимаю кнопку «Назад» после запуска активности и запускаю активность из другого виджета.Однако, если я запускаю активность из виджета A, нажимаю кнопку «Домой» и затем запускаю активность из виджета 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 для каждого виджета.Любая помощь наиболее ценится!

РЕДАКТИРОВАТЬ : Принятый ответ на этот вопрос предполагает, что:

Я считаю, что проблема заключается в том, что выиметь PendingIntent, который отличается только на дополнительные.PendingIntents кэшируются, поэтому, если вы используете два с одинаковыми действием и данными, они будут перезаписывать друг друга.

Однако мой код создает случайные действия для выполнения, и поэтому я думаю, что PendingIntents отличается болеечем просто дополнительные услуги

1 Ответ

2 голосов
/ 01 ноября 2011

Похоже, мне нужно освежить события своего жизненного цикла. Ответом был следующий код, вставленный в мою активность:

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    super.onNewIntent(intent);
}

Проблема заключалась в том, что при нажатии кнопки «Домой» действие удерживалось на исходном Intent, который его запустил. Затем, когда другой виджет запустил Activity, исходное намерение использовалось повторно. Приведенный выше код просто заменяет исходное намерение новым и продолжается с остальными событиями жизненного цикла.

...