NFC标签信息

时间:2014-06-05 10:40:27

标签: android nfc mifare

我有一个问题,有可能知道我读过的解释标签类型NFC的代码来源吗?如果是Mifare 1k或Ntag203或其他?

protected void onNewIntent(Intent intent){
    String[] techList = tag.getTechList();
    for(String tech:techList) {
        //I think must insert here the code         
    }
}

2 个答案:

答案 0 :(得分:0)

NFC标签的指纹识别并不容易。大多数标签不只是告诉你“我是XY”。此外,对于某些标签技术,存在来自几个不同制造商的许多不同标签。例如。 NFC论坛类型2标签由恩智浦,英飞凌,科维奥等人制作。

在使用恩智浦NFC芯片组的设备上找出标签是否为MIFARE Classic相当简单。在这些设备上,您会看到技术列表中列出的android.nfc.tech.MifareClassicTag.getTechList()方法的结果)。对于其他NfcA标记,您可以从执行以下操作开始:

  1. 如果标签具有7字节UID(通过Tag.getId()获取),则第一个字节表示标签制造商的ISO 7816-6注册芯片制造商代码。例如。恩智浦0x04,英飞凌0x05

  2. 一旦您了解芯片制造商,您可以尝试向制造商发送特定的命令(例如,对于NXP标签,您可以发送GET_VERSION命令来检查标签是否为NTAG / MF Ultralight EV1标签或用于检查是否为Ultralight C的验证命令。一些制造商还将更多芯片信息编码到UID中。

  3. 您可以扫描标签内存以查找内存大小,并确定该值是什么芯片类型。

答案 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);

        }
    }
}