Как узнать, находится ли теперь тег NFC в диапазоне от Android?

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

В рамках намерения NFC, полученного вашей деятельностью, вы также получите тег-дескриптор (объект Tag ) в дополнение к дополнительному:

 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 

В зависимости от типа тега вы можете получить экземпляр конкретной технологии тегов. Например, если это тег NDEF, вы можете получить:

 Ndef ndefTag = Ndef.get(tag); 

Затем вы можете подключиться к тегу с помощью метода connect ():

 ndefTag.connect(); 

После этого вы можете проверить, все ли тег «подключен» к устройству, периодически пытаясь прочитать из тега:

 try { ndefTag.getNdefMessage(); } catch (IOException e) { // if you receive an IOException, contact to the tag has been lost } 

Обратите внимание, что это будет работать только в том случае, если ваша деятельность постоянно находится на переднем плане и экран остается включенным.

Существует функция, которая проверяет, все ли подключена карта, называемая isConnected() . Может использоваться следующим образом:

 try { ndef.connect(); while(ndef.isConnected()){ //Your code here } } catch (IOException e) { //Error } в try { ndef.connect(); while(ndef.isConnected()){ //Your code here } } catch (IOException e) { //Error }