簡體   English   中英

如何在 Android 上使用 NFC 從扇區讀取數據

[英]How to read data from a sector using NFC on Android

我正在嘗試從我用於項目的 NFC 卡中讀取數據。 它使用 Mifare classic 1k,有 16 個扇區。

我能夠連接到卡並且我正在嘗試讀取數據(我知道我想要的數據在第 2 扇區 - 第 2 塊中)。 我可以很好地掃描卡,它會顯示卡的大小,這樣可以確保我正確掃描卡,但是當我記錄“data.readBlock(2)”時獲得的數據與密鑰相同我用來驗證它。

我從代碼中了解到:卡連接 Auth == true 我可以獲得卡的整體詳細信息,例如扇區數/塊數

protected void onNewIntent(Intent intent){
            super.onNewIntent(intent);
            Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            MifareClassic tag = MifareClassic.get(tagFromIntent) ;
            try {
                //Variables
                int sectorCount = tag.getSectorCount();
                int tagSize = tag.getSize();
                boolean auth;
                //Keys
                byte[] defaultKeys = new byte[]{};
                defaultKeys = MifareClassic.KEY_DEFAULT;
                //Connecting to tag
                tag.connect();
                //auth = true
                auth = tag.authenticateSectorWithKeyA(2, defaultKeys);
                byte[] data = tag.readBlock(2);
                Log.i("OnNewIntent", "Data in sector 2: " + Arrays.toString(data));
            } catch (IOException e) {
                e.printStackTrace();
            }

預期 =“扇區 2 The data in sector 2 block 2

實際 =“扇區 2 中的數據:[B@4df9e32”

每次掃描卡片時,上述實際結果都會發生變化。

您得到的是 object 參考 Java 用於將其保存在 memory 中。 要獲得數據的可讀版本,請使用:

Arrays.toString(data);

順便說一句,您可能需要更改代碼以檢查身份驗證是否成功:

authSuccessful = mfc.authenticateSectorWithKeyA(sector, key);

if(authSuccessful){
    // Read the block
    creditBlock = mfc.readBlock(block);

    String bytesString = Arrays.toString(creditBlock);
    Log.i(TAG, bytesString);

} else {
    Log.e(TAG, "Auth Failed");
}

最后,我很確定您要做的只是讀取標准的 Mifare 卡,因此請避免草率下結論。 正如他們在醫學上所說:

想想馬,而不是斑馬

我最終通過將 memory 位置轉換為字符串,然后將該字符串轉換為 UTF-8 格式解決了這個問題。 為幫助喝彩

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM