如何确定NFC标签现在是否仍在Android的范围内?
据我所知,当安卓手机触碰NFC标签时,它会发送一个事件(NDEFèU发现意图),但安卓似乎并不关心这个标签是否保持在原位。我的解决方案是锁定屏幕,然后解锁。如果标签还在,我可以再看一遍。这显然是一种愚蠢的方式。有更聪明的方法吗?作为您的活动接收到的NFC意图的一部分,您还将收到一个额外意图中的标记句柄(如何确定NFC标签现在是否仍在Android的范围内?,android,android-intent,tags,nfc,Android,Android Intent,Tags,Nfc,据我所知,当安卓手机触碰NFC标签时,它会发送一个事件(NDEFèU发现意图),但安卓似乎并不关心这个标签是否保持在原位。我的解决方案是锁定屏幕,然后解锁。如果标签还在,我可以再看一遍。这显然是一种愚蠢的方式。有更聪明的方法吗?作为您的活动接收到的NFC意图的一部分,您还将收到一个额外意图中的标记句柄(标记对象): Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 根据标记的类型,您可以获得特定标记技术的实例。例如,如果是ND
标记
对象):
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
根据标记的类型,您可以获得特定标记技术的实例。例如,如果是NDEF标记,您可以获得:
Ndef ndefTag = Ndef.get(tag);
然后可以使用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
}
尚未尝试此操作,但文档指定了一个TagLostException
。如果标记移动到范围之外,前者处理任何其他类型的I/O问题,后者不会触发吗?@user149408TagLostException
是一种特定类型的IO异常。因此,是的,在大多数设备上,IOException e
将是TagLostException
的一个实例。isConnected()不告诉您标记是否仍在范围内,它只告诉您是否成功连接()。您可以离您50米远,标记isConnected()仍将返回true。。。
try {
ndef.connect();
while(ndef.isConnected()){
//Your code here
}
} catch (IOException e) {
//Error
}