Android读取NFC标签数据

时间:2012-11-12 07:59:50

标签: java android nfc rfid

我目前正在开发一个应用程序,该应用程序将阅读NFC tags目前我已编写代码以获取TAG id我接下来应该做什么?如果intent名为EXTRA_NDEF_MESSAGES的额外public void onNewIntent(Intent intent) { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); String zin = tag.getTechList()[0]; info.setText("TagID: " + bytesToHex(tag.getId())+" Saturs: "+zin); } 为空,我该如何阅读所有数据。

目前读取RFID的代码是

NFC tag

我想知道如何阅读{{1}}中的所有数据。

非常感谢你!

2 个答案:

答案 0 :(得分:1)

有各种类型的nfc标签(例如Mifare Ultralight,Mifare Ultralight C,Mifare Classic,felica ......)。 每个标签都有不同的内存大小和读取过程。 例如:Mifare Ultralight有64字节,但mifare Classic 1k包含1千字节内存。 要从mifare ultralight读取数据,不需要额外的身份验证,但Mifare classic需要身份验证。 获得新意图时您可以解析它以获取标记信息:

@Override
    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);

    }
    }
    }
    }

当您获得Exact Tags时,您必须启动该标记的读取过程。 阅读标签完整项目位于My GitHub Repo

答案 1 :(得分:0)

取决于您的TAG类型。超轻型mifare的一个例子

Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareUltralight uTag = MifareUltralight.get(tagFromIntent);
uTag.connect(); //You should enclose this into a try-catch because of probably IOException
byte[] data = uTag.readPages(INDEX_OF_PAGES_YOU_WANT); //This returns 4 consecutive pages from the offset you declared. Each page weights 4 bytes
uTag.close();