HarmonyOS鸿蒙Next中使用MifareClassicTag.readSingleBlock方法读M1卡时,一直报3100204错误,读之前已经卡片已经验证成功,请问怎么解决?

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS鸿蒙Next中使用MifareClassicTag.readSingleBlock方法读M1卡时,一直报3100204错误,读之前已经卡片已经验证成功,请问怎么解决?

这是代码,请查看一下,帮忙看看是哪里出了问题:

onPageShow(): void {
  // 读取nfc标签
  if (nfcTagElementName != undefined) {
    // 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能
    let techList: number[] = [tag.NFC_A, tag.NFC_B, tag.NFC_F, tag.NFC_V,tag.NDEF,tag.NDEF_FORMATABLE,tag.MIFARE_CLASSIC];
    try {
      tag.on('readerMode', nfcTagElementName, techList, (error : BusinessError, tagInfo : tag.TagInfo)=>{
        if (!error) {
          // 获取特定技术类型的NFC标签对象
          if (tagInfo == null || tagInfo == undefined) {
            hilog.error(0x0000, 'testTag', 'readerModeCb tagInfo is invalid');
            return;
          }
          if (tagInfo.uid == null || tagInfo.uid == undefined) {
            hilog.error(0x0000, 'testTag', 'readerModeCb uid is invalid');
            return;
          }
          if (tagInfo.technology == null || tagInfo.technology == undefined || tagInfo.technology.length == 0) {
            hilog.error(0x0000, 'testTag', 'readerModeCb technology is invalid');
            return;
          }

          console.log("mifareClassic: tag found tagInfo = ", JSON.stringify(tagInfo));
          this.tagInfo = JSON.stringify(tagInfo)

          // 执行读写接口完成标签数据的读取或写入数据到标签
          // use the IsoDep technology to access this nfc tag.
          let mifareClassic : tag.MifareClassicTag | null = null;
          // getMifareClassic
          for (let i = 0; i < tagInfo.technology.length; i++) {
            if (tagInfo.technology[i] == tag.MIFARE_CLASSIC) {
              try {
                mifareClassic = tag.getMifareClassic(tagInfo);
                console.log("mifareClassic, mifareClassic", JSON.stringify(mifareClassic))
              } catch (error) {
                hilog.error(0x0000, 'testTag', 'readerModeCb getIsoDep error = %{public}s', JSON.stringify(error));
                return;
              }
            }
         
          }
          if (mifareClassic == undefined) {
            hilog.error(0x0000, 'testTag', 'readerModeCb getIsoDep is invalid');
            return;
          }

          if(mifareClassic == null){
            return;
          }

          try {
            mifareClassic.connect()
            console.info("mifareClassic tag connect success");
          } catch (businessError) {
            console.error("mifareClassic tag connect businessError: " + businessError);
          }

          let tagSize : number = mifareClassic.getTagSize();
         
          this.cardSize = tagSize +'B';
         
          let getType : tag.MifareClassicType = mifareClassic.getType();
          try {
            let key =[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
            let sectorCount : number = mifareClassic.getSectorCount();
            this.sectorCount = sectorCount // 扇区数
            for (let i = 0 ; i < sectorCount; i++) {
              // 验证扇区
          
              mifareClassic.authenticateSector(i, key, true, (err : BusinessError)=>{
                if (err) {
                  console.error(`mifareClassic, 第${i}块扇区验证失败, errCode: ${err.code}, message: ${err.message}`);
                } else {
                  console.info(`mifareClassic , 第${i}块扇区验证成功`);
                  // 验证扇区成功 获取扇区的第一个块号
                  let blockIndex : number | undefined = mifareClassic?.getBlockIndex(i)
                  if(blockIndex != undefined){
                    mifareClassic?.readSingleBlock(blockIndex, (err : BusinessError, data : number[])=>{
                      if (err) {
                        console.error(`mifareClassic,第${blockIndex}块 读取失败 : ` + err.code + "," + err.name);
                      } else {
                        console.info(`mifareClassic,第${blockIndex}块mifareClassic readSingleBlock AsyncCallback data: ` + data);
                      }
                    });
                    mifareClassic?.readSingleBlock(blockIndex+1, (err : BusinessError, data : number[])=>{
                      if (err) {
                        console.error(`mifareClassic,第${blockIndex} + 1块 读取失败 : ` + err.code + "," + err.name);
                      } else {
                        console.info(`mifareClassic,第${blockIndex}+1块mifareClassic readSingleBlock AsyncCallback data: ` + data);
                      }
                    });
                    mifareClassic?.readSingleBlock(blockIndex+2, (err : BusinessError, data : number[])=>{
                      if (err) {
                        console.error(`mifareClassic,第${blockIndex} + 2块 读取失败 : ` + err.code + "," + err.name);
                      } else {
                        console.info(`mifareClassic,第${blockIndex} + 2块mifareClassic readSingleBlock AsyncCallback data: ` + data);
                      }
                    });
                    mifareClassic?.readSingleBlock(blockIndex+3, (err : BusinessError, data : number[])=>{
                      if (err) {
                        console.error(`mifareClassic,第${blockIndex} + 3块 读取失败 : ` + err.code + "," + err.name);
                      } else {
                        console.info(`mifareClassic,第${blockIndex} + 3块mifareClassic readSingleBlock AsyncCallback data: ` + data);
                      }
                    });
                  }
                }
              });
            }
           
          } catch (err) {
            console.error(`mifareClassic authenticateSector Promise errCode: ${err.code}, " + "message: ${err.message}`);
          }



        } else {
          hilog.info(0x0000, 'testTag', 'readerModeCb readerModeCb error %{public}s', JSON.stringify(error));
        }

      });
      foregroundRegister = true;
    } catch (error) {
      hilog.error(0x0000, 'testTag', 'on readerMode error = %{public}s', JSON.stringify(error));
    }
  }
}

更多关于HarmonyOS鸿蒙Next中使用MifareClassicTag.readSingleBlock方法读M1卡时,一直报3100204错误,读之前已经卡片已经验证成功,请问怎么解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

更多关于HarmonyOS鸿蒙Next中使用MifareClassicTag.readSingleBlock方法读M1卡时,一直报3100204错误,读之前已经卡片已经验证成功,请问怎么解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我的代码逻辑基本上和你上面说的一样,根据你说的做了调整,还是一样无法读出,请再帮忙看一下代码:

try {
  mifareClassic.connect()
  console.info("mifareClassic tag connect success");
} catch (businessError) {
  console.error("mifareClassic tag connect businessError: " + businessError);
}

// see 'tag.TagInfo' at 'js-apis-nfcTag.md', obtains the 'mifareClassic' correctly.
// byte[] keybyte = new byte[]{0x01, (byte) 0x11, (byte) 0x18,0x3F,0x12, (byte) 0x11};
// let key = [0x01, 0x11, 0x18, 0x3F, 0x12, 0x11]
try {
  let key =[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
  let sectorCount : number = mifareClassic.getSectorCount();
  this.sectorCount = sectorCount // 扇区数
  for (let i = 0 ; i < sectorCount; i++) {
    mifareClassic.authenticateSector(i, key, true, (err : BusinessError) => {
      if (err) {
        console.error(`mifareClassic, 第${i}块扇区验证失败, errCode: ${err.code}, message: ${err.message}`);
      } else {
        console.info(`mifareClassic , 第${i}块扇区验证成功`);
        // 验证扇区成功 获取扇区的第一个块号
        let blockCount : number | undefined = mifareClassic?.getBlockCountInSector(i)
        if(blockCount != undefined){
          for(let j = 0 ; j < blockCount ; j++){
            mifareClassic?.readSingleBlock(j, (err : BusinessError, data : number[]) => {
              if (err) {
                console.error(`mifareClassic第${i}扇区,第${j}块 读取失败 : ${err.code},${err.name}`);
              } else {
                console.info(`mifareClassic第${i}扇区,第${j}块mifareClassic readSingleBlock AsyncCallback data: ${data}`);
              }
            });
          }
        }
      }
    });
  }
} catch (err) {
  console.error(`mifareClassic authenticateSector Promise errCode: ${err.code}, " + "message: ${err.message}`);
}

运行打印:

12-23 22:17:33.144   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic: tag found tagInfo = {"uid":[176,118,177,36],"technology":[1,8,7],"tagRfDiscId":2,"extrasData":[{"Sak":8,"Atqa":"0400"},{"Sak":8,"Atqa":"0400"},{}]}
12-23 22:17:33.146   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic, mifareClassic {}
12-23 22:17:33.147   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic tag connect success
12-23 22:17:33.158   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 1块扇区验证成功
12-23 22:17:33.166   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 2块扇区验证成功
12-23 22:17:33.177   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 3块扇区验证成功
12-23 22:17:33.186   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 14块扇区验证成功
12-23 22:17:33.195   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 7块扇区验证成功
12-23 22:17:33.203   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 12块扇区验证成功
12-23 22:17:33.211   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 8块扇区验证成功
12-23 22:17:33.219   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 10块扇区验证成功
12-23 22:17:33.232   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 6块扇区验证成功
12-23 22:17:33.242   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 15块扇区验证成功
12-23 22:17:33.250   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 5块扇区验证成功
12-23 22:17:33.271   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic1扇区,第0 读取失败 : 3100204,Error
12-23 22:17:33.278   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 4块扇区验证成功
12-23 22:17:33.287   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 11块扇区验证成功
12-23 22:17:33.296   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 13块扇区验证成功
12-23 22:17:33.316   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic1扇区,第1 读取失败 : 3100204,Error
12-23 22:17:33.323   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 0块扇区验证成功
12-23 22:17:33.332   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   I   mifareClassic , 9块扇区验证成功
12-23 22:17:33.357   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic1扇区,第2 读取失败 : 3100204,Error
12-23 22:17:33.380   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic1扇区,第3 读取失败 : 3100204,Error
12-23 22:17:33.403   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic2扇区,第1 读取失败 : 3100204,Error
12-23 22:17:33.428   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic2扇区,第0 读取失败 : 3100204,Error
12-23 22:17:33.453   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic2扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.987   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic3扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.987   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic3扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.988   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic3扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.988   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic2扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.988   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic14扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.988   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic14扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.989   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic3扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.989   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic14扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.990   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic7扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.990   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic7扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic7扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic10扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic10扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic12扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic10扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic7扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.991   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic12扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.993   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic15扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.993   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic14扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.993   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic6扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.994   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic6扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.994   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic15扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.994   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic15扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.994   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic10扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.995   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic5扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.995   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic5扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.995   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic5扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.996   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic12扇区,第2 读取失败 : 3100204,Error
12-23 22:17:34.997   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic5扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.997   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic11扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.997   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic4扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.997   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic11扇区,第0 读取失败 : 3100204,Error
12-23 22:17:34.998   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic4扇区,第1 读取失败 : 3100204,Error
12-23 22:17:34.998   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic4扇区,第3 读取失败 : 3100204,Error
12-23 22:17:34.998   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic4扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.000   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic13扇区,第0 读取失败 : 3100204,Error
12-23 22:17:35.000   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic8扇区,第0 读取失败 : 3100204,Error
12-23 22:17:35.000   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic0扇区,第1 读取失败 : 3100204,Error
12-23 22:17:35.000   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic8扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.000   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic13扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.001   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic13扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.001   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic11扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic9扇区,第0 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic11扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic0扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic6扇区,第0 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic9扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic0扇区,第0 读取失败 : 3100204,Error
12-23 22:17:35.002   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic6扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic15扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic0扇区,第2 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic8扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic12扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic9扇区,第1 读取失败 : 3100204,Error
12-23 22:17:35.003   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic9扇区,第3 读取失败 : 3100204,Error
12-23 22:17:35.004   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic8扇区,第1 读取失败 : 3100204,Error
12-23 22:17:35.005   15371-15371   A03D00/com.kim...nfcdemo/JSAPP com.kimliu.nfcdemo   E   mifareClassic13扇区,第1 读取失败 : 3100204,Error

第二层for循环里面,读取数据时,你使用j直接读取,参考安卓代码:

`mifareClassic.readBlock(mifareClassic.sectorToBlock(i) + j);

鸿蒙nfc读写数据的api功能,基本与安卓的类似,你可以参考你原先安卓的读写代码,逻辑结构不用变,将api替换下名称替换下即可。你上面的代码,应该是有些问题。

安卓代码:

private void readM1Card(Tag tag) {
    MifareClassic mifareClassic = MifareClassic.get(tag);
    try {
        mifareClassic.connect();
        int sectorCount = mifareClassic.getSectorCount();
        for (int i = 0; i < sectorCount; i++) {
            if (mifareClassic.authenticateSectorWithKeyA(i, MifareClassic.KEY_DEFAULT)) {
                int blockCount = mifareClassic.getBlockCountInSector(i);
                for (int j = 0; j < blockCount; j++) {
                    byte[] data = mifareClassic.readBlock(mifareClassic.sectorToBlock(i) + j);
                    // 处理读取到的数据
                    String dataStr = new String(data);
                    Toast.makeText(this, "Sector " + i + ", Block " + j + ": " + dataStr, Toast.LENGTH_SHORT).show();
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            mifareClassic.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

尝试下参考上面安卓代码,你的mifareClassic.authenticateSector之后,

  • let sectorCount : number = mifareClassic.getSectorCount();
  • 然后再进行for循环

在HarmonyOS鸿蒙Next中使用MifareClassicTag.readSingleBlock方法读取M1卡时,如果遇到3100204错误,可能的原因包括:

  1. 密钥验证问题:虽然卡片已经验证成功,但密钥可能不正确或与目标扇区不匹配。确保使用正确的密钥进行验证。

  2. 扇区或块号错误:提供的扇区或块号可能无效或超出范围。M1卡通常有16个扇区,每个扇区包含4个块。确保块号在有效范围内。

  3. 卡片状态问题:卡片可能处于不可读状态,如被锁定或损坏。确认卡片状态正常。

  4. 权限问题:某些块可能需要特定的权限才能读取。确认当前密钥具有读取该块的权限。

  5. 硬件或驱动问题:NFC读写器或驱动程序可能存在问题,导致无法正确读取卡片。检查硬件和驱动是否正常工作。

  6. API调用顺序问题:在调用readSingleBlock之前,确保已经正确初始化并选择了卡片。

  7. 系统或SDK版本问题:当前使用的HarmonyOS或SDK版本可能存在已知问题。检查是否有相关更新或补丁。

建议逐步排查上述可能的原因,确保每个环节都正确无误。

错误码3100204通常表示操作权限不足或卡片状态异常。建议您按照以下步骤排查:

  1. 确保卡片已正确验证,且使用的密钥与卡片匹配。

  2. 检查读卡器与卡片的连接是否稳定,避免信号干扰。

  3. 确认使用的块地址合法,且该块未被设置为不可读。

  4. 尝试重新初始化卡片,再进行读取操作。

如果问题依旧,建议查看HarmonyOS官方文档或联系技术支持获取更详细的指导。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!