Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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
如何读取另一台Android设备的NFC ID?_Android_Nfc_Uniqueidentifier_Hce_Nfc P2p - Fatal编程技术网

如何读取另一台Android设备的NFC ID?

如何读取另一台Android设备的NFC ID?,android,nfc,uniqueidentifier,hce,nfc-p2p,Android,Nfc,Uniqueidentifier,Hce,Nfc P2p,我想将NFC标签ID从一个Android设备交换(或仅读取)到另一个设备,但我不知道是否应该使用对等模式或使用HCE模拟NFC标签 如果我使用HCE,模拟的标记ID是唯一的吗 什么是更好的选择,或者有更简单的选择?P2P和HCE都不会为您提供唯一的ID,至少在我所知道的任何手机上都不会。对于P2P,要求在ATR中交换的ID是随机的。对于HCE,模拟标记ID通常设置为08h加上一个随机数。可能需要设置API调用,但我不知道有这样的情况。但是很有意义的是,一部手机不能被任何阅读者唯一识别。我如何读取

我想将NFC标签ID从一个Android设备交换(或仅读取)到另一个设备,但我不知道是否应该使用对等模式或使用HCE模拟NFC标签

如果我使用HCE,模拟的标记ID是唯一的吗


什么是更好的选择,或者有更简单的选择?

P2P和HCE都不会为您提供唯一的ID,至少在我所知道的任何手机上都不会。对于P2P,要求在ATR中交换的ID是随机的。对于HCE,模拟标记ID通常设置为08h加上一个随机数。可能需要设置API调用,但我不知道有这样的情况。但是很有意义的是,一部手机不能被任何阅读者唯一识别。

我如何读取另一台Android设备的NFC ID? 我假设您在这里谈论的是防冲突标识符/UID。在reading Android设备上,您可以使用reader mode API以HCE模式访问设备:

nfcAdapter.enableReaderMode(this, new NfcAdapter.ReaderCallback() {
    public void onTagDiscovered (Tag tag) {
        byte[] uid = tag.getId();
        // TODO: do something with the UID ...
    }
}, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, null);
模拟的标记ID是否唯一? 看。通常,P2P模式和HCE都不应提供唯一和稳定的ID。但是,也有一些例外情况,非稳定的ID更改的时间点可能会有所不同(另请参阅)。可能是:

  • 设备有一个安全元素,并使用该安全元素的静态UID
  • 设备在开机时会生成一个新的随机UID,但在关机前会继续使用相同的UID
  • 该设备在外部读卡器设备每次激活时生成一个新的随机UID。即,当外部高频场应用于Android设备的NFC天线时
还请注意,一些NFC设备将使用随机生成的UID,这些UID不以随机前缀
0x08
开头

我可以强制设备使用固定/稳定的UID吗? Android不提供影响UID/防冲突标识符的API,因此简短的回答是否。但是,如果根或创建自定义ROM是一个选项,则有可能更改UID和其他协议参数:

您是否应该使用UID来识别(甚至验证)设备? 不,你绝对不应该这样做。当您试图将HCE设备集成到某个遗留系统中时,您有时没有太多选择,但您肯定应该考虑不同的设计

首先,如果NFC设备公开了一个固定/稳定的标识符,这可能会导致隐私问题,因为任何人都可以读取和跟踪ID

第二,虽然许多系统仍然使用这些ID来验证(!)卡,但UID不一定是唯一的(尤其是4字节的UID少于现有的卡),而且UID可以很容易地克隆。有关更多详细信息,请参阅