mifare classic 1k - Android - Tranceive读取块失败

时间:2013-05-09 12:55:49

标签: android nfc mifare

我正在尝试使用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失败。

我做错了什么?

2 个答案:

答案 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);