PendingIntent из-за конфликтов уведомлений и истории приложений

StackOverflow https://stackoverflow.com/questions/2541884

  •  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 для каждого уведомления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top