【问题标题】:How to use android to get complete data in NFC tag?如何使用android获取NFC标签中的完整数据?
【发布时间】:2014-09-04 04:27:46
【问题描述】:

我编写了这个程序,它可以读取 NFC 标签中的所有有效负载

@Override
protected void onNewIntent(Intent intent) {

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {

        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (rawMsgs != null) {
            String payloadString="";
            NdefMessage[] msg = new NdefMessage[rawMsgs.length];
            for (int i = 0; i < rawMsgs.length; i++) {
                msg[i] = (NdefMessage) rawMsgs[i];
                NdefRecord[] rec=msg[i].getRecords();
                byte[] byteArray=rec[0].getPayload();
                payloadString=new String(byteArray);

                Log.v("log", payloadString);
            }
        }
    }
}

我尝试将 NfcAdapter.EXTRA_NDEF_MESSAGES 更改为不同的值,例如:

NfcAdapter.EXTRA_ADAPTER_STATE, 
NfcAdapter.EXTRA_TAG, 
NfcAdapter.EXTRA_ID

但是没有人可以从标签中获取数据

如果使用一些NFC阅读器应用读取标签,你会看到payload前后有一些数据,这是标签中的完整数据。

标签ic的类型是NTAG203

(05) D1 01 85 54 是数据的头部。

从(06) 02 65 6E 30 30 30 30 .....到(27) 30 30 30 31是payload的内容

我想获取标签中的所有数据,比如:

从 (00) 04 DB 39 64 ... 到 (05) 44 03 89

和 (28) 00 00 -- -- , (29) 00 00 -- --

如何使用android读取这些数据?

目的是,使用这些数据来保护我的产品,我会要求制造商在这些只读区域写入一些密钥,只有 NFC 卡有密钥才能使用我的应用程序,所以我需要读取这些数据。

【问题讨论】:

    标签: java android nfc


    【解决方案1】:

    Android NDEF API 将为您提供标签的 NDEF 内容,并抽象出标签技术的所有细节。

    如果你想从标签中读取原始数据,你需要为你正在读取的特定标签类型使用 android.nfc.tech.* 类。在这种情况下,NTAG203 是类型 2 Mifare Ultralight

    您可以使用readPages(page) 从标签中获取原始数据。

    【讨论】:

      【解决方案2】:

      首先确定您拥有的卡类型,即 Is07816 等,然后尝试获取该数据,然后对数据进行解码。

      【讨论】:

      • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
      • 有不同类型的 NFC 标签,如 Felica、Iso1443 等,它们具有不同的数据编码,因此为了访问和解码卡的数据,您必须研究这些编码,然后您将能够读取完整的数据。在现代技术中,标签将数据作为 APDU 发送,因此您也可以学习管理 APDU。这将帮助您完成申请。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多