Как навсегда отключить обнаружение тегов NDEF в приложении для Android, а не только для Activity?
У нас есть приложение, которое используется для симуляции POS-терминала, то есть оно взаимодействует с дебетовыми / кредитными картами через NFC. Во всех действиях приложения я использую:
nfcAdapter.enableReaderMode(this,
nfcCallback,
NfcAdapter.FLAG_READER_NFC_A |
NfcAdapter.FLAG_READER_NFC_B |
NfcAdapter.FLAG_READER_NFC_F |
NfcAdapter.FLAG_READER_NFC_V |
NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS |
NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK,
null
);
чтобы отключить обнаружение NDEF, потому что это мешает коммуникации карты. Это работает хорошо, но ТОЛЬКО в действии, то есть при запуске нового действия или завершении того, который был вызван с startActivityForResult
очевидно, это промежуточное состояние, когда ОС отправляет одно сообщение об обнаружении тега NDEF, например:
2018-11-14 09:07:11.794 802-3109/? D/NxpNciX: len = 16 > 00000D00A4040007D276000085010100
2018-11-14 09:07:11.794 802-3109/? D/NxpTml: PN54X - I2C Write successful.....
Основная проблема заключается в том, что это не повторяется, то есть иногда это происходит, иногда нет. Это большая проблема.
Есть ли способ отключить обнаружение тега NDEF на уровне приложения, а не только для активности?
ИЛИ ЖЕ
Есть ли решение этой проблемы?
1 ответ
Очень поздний ответ, но отметим это здесь для будущих искателей.
Начиная с API 24, в экземпляре nfcAdapter появилась новая функция, позволяющая игнорировать повторные сканирования одного и того же тега в течение определенного периода времени.
Мне удалось добавить это после успешного чтения nfc внутри обратного вызова nfc (перед переключением
Activity
с
startActivityForResult
).
// Ignore rescans of the same tag for 3 seconds in an attempt to avoid the tag being
// rescanned and having the default response while we are switching activities (while navigating)
// 3 seconds chosen as 1 second sometimes isn't enough and 3 seconds seems appropriate. Not too long or short...
nfcAdapter.ignore(tag, 3000, null, null);