У меня есть виджет, в котором есть кнопка говорить. При нажатии кнопки разговора на виджете я открываю 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);