Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定NFC标签现在是否仍在Android的范围内?_Android_Android Intent_Tags_Nfc - Fatal编程技术网

如何确定NFC标签现在是否仍在Android的范围内?

如何确定NFC标签现在是否仍在Android的范围内?,android,android-intent,tags,nfc,Android,Android Intent,Tags,Nfc,据我所知,当安卓手机触碰NFC标签时,它会发送一个事件(NDEFèU发现意图),但安卓似乎并不关心这个标签是否保持在原位。我的解决方案是锁定屏幕,然后解锁。如果标签还在,我可以再看一遍。这显然是一种愚蠢的方式。有更聪明的方法吗?作为您的活动接收到的NFC意图的一部分,您还将收到一个额外意图中的标记句柄(标记对象): Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 根据标记的类型,您可以获得特定标记技术的实例。例如,如果是ND

据我所知,当安卓手机触碰NFC标签时,它会发送一个事件(NDEFèU发现意图),但安卓似乎并不关心这个标签是否保持在原位。我的解决方案是锁定屏幕,然后解锁。如果标签还在,我可以再看一遍。这显然是一种愚蠢的方式。有更聪明的方法吗?

作为您的活动接收到的NFC意图的一部分,您还将收到一个额外意图中的标记句柄(
标记
对象):

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问题,后者不会触发吗?@user149408
TagLostException
是一种特定类型的IO异常。因此,是的,在大多数设备上,
IOException e
将是
TagLostException
的一个实例。isConnected()不告诉您标记是否仍在范围内,它只告诉您是否成功连接()。您可以离您50米远,标记isConnected()仍将返回true。。。
try {
    ndef.connect();
    while(ndef.isConnected()){

    //Your code here

    }
} catch (IOException e) {
    //Error
}