Согласно документации
Это вызывается для действий, которые устанавливают для launchMode значение "singleTop" в своем пакете или если клиент использовал флаг Intent.FLAG_ACTIVITY_SINGLE_TOP при вызовеstartActivity (Intent).
Исходя из этого, вы можете попробовать либо:
- установить
android:launchMode
в манифесте на singleTop
;или - добавление флага к
Intent
через intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
перед вызовом startActivity
Если вам:
- нужен
singleInstance
поведение;и - хотят получить информацию, когда
Activity
на заднем плане вышел на передний план (например, в случае singleInstance
);и - явно не нужно
Intent
, тогда вы можете реализовать метод onResume
, который будет вызываться, когда пользователь возвращается кActivity
.
Редактировать после тестирования
Что я наблюдал при тестировании, так это то, что если singleInstance
Activity
находится в фоновом режиме и Intent
s передаютсяон (например, через startActivity
) ставится в очередь до тех пор, пока Activity
не выйдет на передний план, а затем:
onNewIntent
вызывается для каждого Intent
;затем onResume
вызывается один раз
Это противоречит документации, но может быть использовано для решения вашей проблемы.
Как отмечено в документации :
Обратите внимание, что getIntent()
по-прежнему возвращает исходное намерение.Вы можете использовать setIntent(Intent)
, чтобы обновить его до этого нового намерения.
Итак, если вы счастливы обработать Intent
s, когда Activity
выходит на передний план, вы можете заменить свойonNewIntent
выше с:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
if (intent != null && intent.hasExtra("click") && intent.getBooleanExtra("click", false)) {
Toast.makeText(getApplicationContext(), "Notification Clicked", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "False", Toast.LENGTH_SHORT).show();
}
}