Ожидающие дополнительные намерения не очищаются, даже если активность создается повторно

У меня есть виджет, в котором есть кнопка говорить. При нажатии кнопки разговора на виджете я открываю MainActivity, которая объявлена ​​в манифесте как одиночная вершина.

Ниже приведен код кнопки виджета «говорить».

Intent speakIntent = new Intent(context, MainActivity.class);
speakIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
speakIntent.putExtra(Constants.IS_LAUNCH_SPEAK, true);
speakIntent.setAction(ACTION_WIDGET_SPEAK_SCREEN);
PendingIntent configSpeakPendingIntent = PendingIntent.getActivity(
            context, Utils.generateRandom(), speakIntent,  PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(
            R.id.btn_speak, configSpeakPendingIntent);

Это открывает диалоговое окно Google Talk и отлично работает.

Но если я нажму на это диалоговое окно и сверну приложение, снова нажав кнопку «Назад» при возобновлении работы приложения, он отобразит диалоговое окно «Говорить», даже если приложение не запускается из виджета.

Дополнительные намерения SO не очищаются, даже если активность уничтожена. Я также пытался очистить дополнительные функции с помощью removeExtra, но это также не работает.

Поскольку активность имеет режим однократного запуска в манифесте, я проверил, вызывается ли OnNewIntent или нет, но OnNewIntent не вызывается, oncreate вызывается при возобновлении работы приложения.

Дополнительные намерения не проясняются при вызове из события виджета, хотя активность уничтожается, а removeExtra не работает.

Как это исправить.

То же самое происходит при открытии активности через уведомление, следующее за кодом

Intent intent = new Intent();
intent.putExtra(Constants.SOME_VALUE, value);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, Utils.generateRandom() /* Request code */, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

person amodkanthe    schedule 19.10.2016    source источник
comment
попробуйте также использовать PendingIntent.FLAG_ONE_SHOT в сочетании с FLAG_UPDATE_CURRENT   -  person kimchibooty    schedule 19.10.2016
comment
поэтому PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT флаг одного выстрела гарантирует, что конкретное ожидающее намерение будет использоваться только один раз.   -  person kimchibooty    schedule 19.10.2016
comment
пробовал тоже не работает   -  person amodkanthe    schedule 20.10.2016
comment
См. этот похожий вопрос и мой ответ на него: stackoverflow.com/a/19820057/769265   -  person David Wasser    schedule 21.10.2016


Ответы (1)


Попробуйте этот код после того, как вы поместите константы

callBack.getActivity().clearLaunchIntent();

Вызовите clearLaunchIntent() из своей деятельности

public void clearLaunchIntent() { this.lastLaunchIntent = null; }

Надеюсь, это поможет

person vpdeva    schedule 21.03.2017