gpt4 book ai didi

java - 如何在 Android 上使用 NFC 从扇区读取数据

转载 作者:行者123 更新时间:2023-12-01 22:38:43 25 4
gpt4 key购买 nike

我正在尝试从项目的 NFC 卡中读取数据。它使用 Mifare classic 1k,有 16 个扇区。

我能够连接到卡,并且正在尝试读取数据(我知道我想要的数据位于第二个扇区 - 第二个 block )。我可以很好地扫描卡,它会显示卡的大小,这样可以确保卡被正确扫描,但是当我记录“data.readBlock(2)”时获得的数据与 key 相同我用它来验证它。

我从代码中了解到的内容:卡连接验证==真我可以获得卡的整体详细信息,例如扇区数/ block 数

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中的数据:扇区2 block 2中的数据

实际 =“扇区 2 中的数据:[B@4df9e32”

每次扫描卡片时,上述实际结果都会发生变化。

最佳答案

您得到的是 Java 用于将其保存在内存中的对象引用。要获取数据的可读版本,请使用:

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 卡读取,因此请避免急于下结论。正如医学上所说:

Think horses, not zebras

关于java - 如何在 Android 上使用 NFC 从扇区读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58510908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com