Новый экземпляр программы создается при прикосновении к тегу NFC

1

Мое Android-приложение использует фильтр намерений для события "NDEF_DISCOVERED", чтобы открыть его, если оно содержит определенный URL-адрес. Это работает нормально, но я заметил, что, если я помещаю свое приложение в фоновый режим и нажимаю на тег NFC, запускается новый экземпляр программы. Если я сделаю это несколько раз, я получу несколько экземпляров своего приложения. Это вызывает у меня некоторые проблемы, поэтому я хотел бы найти решение, чтобы открыть только один экземпляр.

Дополнительный комментарий: Когда моя программа находится на переднем плане, я использую enableForegroundDispatch() в onResume и disableForegroundDispatch() в onPause. Работает нормально.

Когда моя программа находится в фоновом режиме и когда я нажимаю на тег NFC, существует ли способ, которым система обнаруживает, что программа уже запущена, и помещает ее на передний план вместо запуска нового экземпляра?

Для сравнения, если я помещаю свою программу в фоновый режим, перехожу к списку программ и нажимаю на мою программу, Android обнаруживает, что эта программа уже открыта, и возобновляет ее без создания нового экземпляра (onCreate() MainActivity не называется в этом случае). Почему у нас нет одинакового поведения с событиями NFC и возможно ли такое же поведение?

Я читал эту ветку (приложение, получающее NFC, всегда выскакивает новый экземпляр впереди), это тот же вопрос, но он не помог мне найти решение.

Теги:
nfc
android-intent

1 ответ

1
Лучший ответ

Я добавил:

android:launchMode="singleTask"

как указано здесь, и это действительно работает.

Как сказано в документации: (Источник https://developer.android.com/guide/components/activities/tasks-and-back-stack)

"singleTask":

Система создает новую задачу и создает экземпляр действия в корне новой задачи. Однако, если экземпляр действия уже существует в отдельной задаче, система направляет намерение к существующему экземпляру посредством вызова его метода onNewIntent() вместо создания нового экземпляра. Только один экземпляр действия может существовать одновременно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню