如何读取另一台Android设备的NFC ID?
我想将NFC标签ID从一个Android设备交换(或仅读取)到另一个设备,但我不知道是否应该使用对等模式或使用HCE模拟NFC标签 如果我使用HCE,模拟的标记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调用,但我不知道有这样的情况。但是很有意义的是,一部手机不能被任何阅读者唯一识别。我如何读取
什么是更好的选择,或者有更简单的选择?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天线时
0x08
开头
我可以强制设备使用固定/稳定的UID吗?
Android不提供影响UID/防冲突标识符的API,因此简短的回答是否。但是,如果根或创建自定义ROM是一个选项,则有可能更改UID和其他协议参数: