我正在尝试使用mifare经典卡1k和android nfc(在galaxy nexus上)读取块。
private final int mMaxSize = 64;
mClassic.connect();
boolean success = mClassic.authenticateSectorWithKeyA(1, MifareClassic.KEY_DEFAULT );
final ByteArrayBuffer b = new ByteArrayBuffer(mMaxSize);
if (success)
{
b.append(mClassic.readBlock(0), 0, 16);
b.append(mClassic.readBlock(1), 0, 16);
b.append(mClassic.readBlock(2), 0, 16);
b.append(mClassic.readBlock(3), 0, 16);
}
如果我想读取0区,那就没关系了。
但是,如果我想要读取不同的扇区(例如扇区1),则成功具有真正的价值,但当应用程序转到readBlock()
时,会触发IOException
并且我已经返回了tranceiver失败。
我做错了什么?
答案 0 :(得分:0)
在您的代码示例中,您要对扇区1 进行身份验证,但然后尝试从扇区0 中读取块。记住扇区和块号是从零开始的。您可能也对blockToSector(int block)感兴趣。
答案 1 :(得分:0)
您应该
b.append(mClassic.readBlock(4), 0, 16);
b.append(mClassic.readBlock(5), 0, 16);
b.append(mClassic.readBlock(6), 0, 16);
b.append(mClassic.readBlock(7), 0, 16);