PendingIntent из-за конфликтов уведомлений и истории приложений
-
23-09-2019 - |
Вопрос
Я создаю уведомление примерно следующего содержания:
Intent ni = new Intent(this, SomeActivity.class);
ni.putExtra("somestring", "somedata");
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, ni,
PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
Context context = getApplicationContext();
notification.setLatestEventInfo(context,
res.getString(R.string.app_name),
text, contentIntent);
Ключевым моментом здесь являются дополнительные данные о намерении уведомления.Как только я нажимаю на уведомление, и оно вызывает SomeActivity, оно вызывает активность и становятся доступными дополнительные данные.
Однако если я выйду из приложения, удержу кнопку «Домой», пока не появится список недавних действий, и решу снова открыть приложение, дополнительные данные все равно будут переданы.Есть ли способ передать эти данные? только если приложение открывается через Уведомление, а не из списка последних действий?
Решение
Похоже, я могу проверить, было ли запущено действие из диалогового окна недавних действий, с помощью этого:
if((getIntent().getFlags() &
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// ignore extras
}
else {
// do not ignore extras
}
Я не знаю, лучший ли это способ, но он работает.
Другие советы
Используйте другой Intent
.Например, вы можете добавить <intent-filter>
для некоторой строки настраиваемого действия и используйте ее для своих Notification
-основанный на PendingIntent
.Другими словами, вы не можете изменить диалог о последних действиях, но можете изменить свою сторону конфликта.
Попробуйте с:
int NOTIFICATION_CODE = 1;
PendingIntent contentIntent =
PendingIntent.getActivity(this,
NOTIFICATION_CODE,
ni,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_ONE_SHOT
);
Измените значение NOTIFICATION_CODE для каждого уведомления.