Java 如何在Android上使用NFC从扇区读取数据
我正试图从一个项目的NFC卡上读取数据。它使用Mifare classic 1k,有16个扇区 我能够连接到卡,并且我正在尝试读取数据(我知道我想要的数据在第二扇区-第二块)。我可以很好地扫描卡,它会显示卡的大小,这样可以确保正确扫描卡,但我在记录“data.readBlock(2)”时获得的数据与我用于验证它的密钥相同 我从代码中了解到: 卡连接 Auth==true 我可以获得卡的整体详细信息,如扇区计数/块计数Java 如何在Android上使用NFC从扇区读取数据,java,android,nfc,mifare,Java,Android,Nfc,Mifare,我正试图从一个项目的NFC卡上读取数据。它使用Mifare classic 1k,有16个扇区 我能够连接到卡,并且我正在尝试读取数据(我知道我想要的数据在第二扇区-第二块)。我可以很好地扫描卡,它会显示卡的大小,这样可以确保正确扫描卡,但我在记录“data.readBlock(2)”时获得的数据与我用于验证它的密钥相同 我从代码中了解到: 卡连接 Auth==true 我可以获得卡的整体详细信息,如扇区计数/块计数 protected void onNewIntent(Intent inten
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();
}
Expected=“扇区2中的数据:扇区2中的数据块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卡片阅读,所以不要急于下结论。正如医学界所说:
想想马,而不是斑马
通过将内存位置转换为字符串,然后将该字符串转换为UTF-8格式,我最终解决了此问题。为帮助干杯嗨,Jacob,感谢您的响应。我尝试了此操作,它返回了一个“[4]”我假设是块的大小。你可能知道我是NFC的新手,那么你对如何打印块中的数据有什么其他建议吗?谢谢!你正在尝试通过对扇区2进行身份验证来读取扇区0中的块2。块编号不会重新启动每个扇区。因此,如果你想读取扇区2的区块2区块编号应该是9。请记住区块计数和扇区计数都从0开始。就我个人而言,这是我过去在这个主题上的开始。我已经查看了链接,我从中得到了一些东西…虽然都是数字,而不是我知道的卡上的实际字符串。非常混乱,有什么想法吗例如,如果我将扇区更改为9:[83、88、48、48、49、51、54、55、48、56、32、35、35、35、35]如果您原来的问题已经解决,请单击我的答案旁边的复选标记。您现在看到的是存储在卡上的字节,这绝对是您应该得到的。我建议在继续之前更好地掌握您正在处理的内容。您需要将这些字节处理为您需要的字节,然后o您需要知道信息是如何存储在卡中的。