1

我正在尝试使用 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(),会触发 anIOException并且我已返回 tranceiver failed。

我做错了什么?

4

2 回答 2

0

在您的代码示例中,您正在对扇区 1进行身份验证,然后尝试从扇区 0读取块。请记住,扇区和块编号是从零开始的。您可能还对blockToSector(int block)感兴趣。

于 2013-07-13T13:00:50.123 回答
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);
于 2018-09-24T12:13:06.987 回答