[英]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.