Android上具有奇怪行为的Mifare授权

Android上具有奇怪行为的Mifare授权,android,nfc,mifare,Android,Nfc,Mifare,我面临着一种奇怪的行为。按键A和B有权读取块0、1和2。(访问条件设置为:6E1789) 但我只能用A键阅读,因为有了B键,Android应用程序检测到一个新的NFC标签,并丢失了最后一个,所以她会先“暂停”,然后“重新启动”,这一次又一次 这里是我的读取数据的函数(对于键A是相同的,但是authenticateSectorWithKeyB当然被authenticateSectorWithKeyA替换) 系统没有捕捉到IOException。。。 我不知道问题出在哪里?那么您是否捕获了自己的所有

我面临着一种奇怪的行为。按键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;
    }