Android上具有奇怪行为的Mifare授权
我面临着一种奇怪的行为。按键A和B有权读取块0、1和2。(访问条件设置为:6E1789) 但我只能用A键阅读,因为有了B键,Android应用程序检测到一个新的NFC标签,并丢失了最后一个,所以她会先“暂停”,然后“重新启动”,这一次又一次 这里是我的读取数据的函数(对于键A是相同的,但是authenticateSectorWithKeyB当然被authenticateSectorWithKeyA替换) 系统没有捕捉到IOException。。。Android上具有奇怪行为的Mifare授权,android,nfc,mifare,Android,Nfc,Mifare,我面临着一种奇怪的行为。按键A和B有权读取块0、1和2。(访问条件设置为:6E1789) 但我只能用A键阅读,因为有了B键,Android应用程序检测到一个新的NFC标签,并丢失了最后一个,所以她会先“暂停”,然后“重新启动”,这一次又一次 这里是我的读取数据的函数(对于键A是相同的,但是authenticateSectorWithKeyB当然被authenticateSectorWithKeyA替换) 系统没有捕捉到IOException。。。 我不知道问题出在哪里?那么您是否捕获了自己的所有
我不知道问题出在哪里?那么您是否捕获了自己的所有异常?不太清楚您在做什么。当读A,然后读B,或者只读B时,会发生这种情况吗?很可能卡正在重置身份验证状态,这在应用程序端被视为
onNewIntent()
。@Thomas,我在上面的方法中捕捉到IOException,我抛出自己的异常(MifareException),以与其他NFC技术有所不同。@NikolayElenkov,当我试图用B键读取时会发生这种情况,使用A键读取时一切正常。是否有方法不重置身份验证状态?THXI如果您正在单步执行调试器,则可能会超时并重置卡。如果不启动新线程,它将在主/UI线程中执行。不要这样做。
public byte[] readOneSectorOneBlockKeyB(byte[] key, int sectorNumber, int blockNumber) throws MifareException {
byte[] data = null;
try {
boolean auth = false;
int bIndex = 0;
auth = mfc.authenticateSectorWithKeyB(sectorNumber, key);
if (auth) {
bIndex = 0;
bIndex = mfc.sectorToBlock(sectorNumber);
data = mfc.readBlock(bIndex + blockNumber);
} else {
throw new MifareException("Authentification failed");
}
} catch (IOException e) {
throw new MifareException(e.getLocalizedMessage());
}
return data;
}