我有一个问题,有可能知道我读过的解释标签类型NFC的代码来源吗?如果是Mifare 1k或Ntag203或其他?
protected void onNewIntent(Intent intent){
String[] techList = tag.getTechList();
for(String tech:techList) {
//I think must insert here the code
}
}
答案 0 :(得分:0)
NFC标签的指纹识别并不容易。大多数标签不只是告诉你“我是XY”。此外,对于某些标签技术,存在来自几个不同制造商的许多不同标签。例如。 NFC论坛类型2标签由恩智浦,英飞凌,科维奥等人制作。
在使用恩智浦NFC芯片组的设备上找出标签是否为MIFARE Classic相当简单。在这些设备上,您会看到技术列表中列出的android.nfc.tech.MifareClassic
(Tag.getTechList()
方法的结果)。对于其他NfcA
标记,您可以从执行以下操作开始:
如果标签具有7字节UID(通过Tag.getId()
获取),则第一个字节表示标签制造商的ISO 7816-6注册芯片制造商代码。例如。恩智浦0x04
,英飞凌0x05
等
一旦您了解芯片制造商,您可以尝试向制造商发送特定的命令(例如,对于NXP标签,您可以发送GET_VERSION命令来检查标签是否为NTAG / MF Ultralight EV1标签或用于检查是否为Ultralight C的验证命令。一些制造商还将更多芯片信息编码到UID中。
您可以扫描标签内存以查找内存大小,并确定该值是什么芯片类型。
答案 1 :(得分:0)
当你获得标签时,然后使用TechList你可以找到确切的标签类型。 这是样本:
protected void onNewIntent(Intent intent){
getTagInfo(intent)
}
private void getTagInfo(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String[] techList = tag.getTechList();
for (int i = 0; i < techList.length; i++) {
if (techList[i].equals(MifareClassic.class.getName())) {
MifareClassic mifareClassicTag = MifareClassic.get(tag);
switch (mifareClassicTag.getType()) {
case MifareClassic.TYPE_CLASSIC:
//Type Clssic
break;
case MifareClassic.TYPE_PLUS:
//Type Plus
break;
case MifareClassic.TYPE_PRO:
//Type Pro
break;
}
} else if (techList[i].equals(MifareUltralight.class.getName())) {
//For Mifare Ultralight
MifareUltralight mifareUlTag = MifareUltralight.get(tag);
switch (mifareUlTag.getType()) {
case MifareUltralight.TYPE_ULTRALIGHT:
break;
case MifareUltralight.TYPE_ULTRALIGHT_C:
break;
}
} else if (techList[i].equals(IsoDep.class.getName())) {
// info[1] = "IsoDep";
IsoDep isoDepTag = IsoDep.get(tag);
} else if (techList[i].equals(Ndef.class.getName())) {
Ndef.get(tag);
} else if (techList[i].equals(NdefFormatable.class.getName())) {
NdefFormatable ndefFormatableTag = NdefFormatable.get(tag);
}
}
}