鸿蒙Next NFC标签读写开发指南:从基础到实战

NFC技术基础

NFC(近场通信)是一种短距离无线通信技术,工作频率为13.56MHz,支持读写模式、点对点模式和卡模拟模式。鸿蒙Next通过ohos.nfc模块提供NFC能力,支持ISO 14443-3/4、MIFARE Classic等协议。

开发前需确保设备支持NFC功能,并在config.json中声明权限:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.NFC_TAG"
      }
    ]
  }
}

环境配置与初始化

在鸿蒙Next中启用NFC功能需在MainAbilityonCreate方法中初始化NFC适配器:

import nfc from '@ohos.nfc';  

export default class MainAbility extends Ability {  
  onCreate() {  
    const nfcController = nfc.getNfcController();  
    if (!nfcController.isNfcAvailable()) {  
      console.error("NFC不可用");  
      return;  
    }  
    nfcController.enableNfc(); // 启用NFC  
  }  
}  

NFC标签检测与读写

通过订阅tagDiscovered事件监听标签靠近事件:

import nfc from '@ohos.nfc';  

// 注册标签发现回调  
nfc.on("tagDiscovered", (tagInfo) => {  
  const tag = tagInfo.tag;  
  if (tag.techList.includes(nfc.NFCTechType.MIFARE_CLASSIC)) {  
    handleMifareClassicTag(tag); // 处理MIFARE Classic标签  
  }  
});  

function handleMifareClassicTag(tag) {  
  const mifare = tag.getTech(nfc.NFCTechType.MIFARE_CLASSIC);  
  mifare.connect();  
  const sectorData = mifare.readSector(0); // 读取第0扇区  
  console.log("Sector 0 data: " + sectorData);  
  mifare.writeSector(0, "New Data"); // 写入数据  
  mifare.close();  
}  

实战:门禁卡模拟

实现门禁卡模拟需将标签数据转换为NDEF格式:

function writeNdefMessage(tag) {  
  const ndef = tag.getTech(nfc.NFCTechType.NDEF);  
  ndef.connect();  
  const message = {  
    records: [  
      {  
        tnf: nfc.NDEF_TNF_WELL_KNOWN,  
        type: "T", // 文本类型  
        payload: "Door Access Card"  
      }  
    ]  
  };  
  ndef.writeNdefMessage(message);  
  ndef.close();  
}  

调试与优化

  • 日志监控:使用HiLog输出NFC操作日志,便于排查读写失败问题。
  • 异常处理:捕获NfcError错误码,如ERR_NFC_TAG_NOT_SUPPORTED表示标签类型不支持。
  • 性能优化:避免在主线程执行耗时操作,使用TaskPool异步处理数据读写。

安全注意事项

  • 敏感数据需加密存储,避免明文写入标签。
  • 检查标签是否支持写保护,防止数据篡改。

通过以上步骤,开发者可快速实现鸿蒙Next的NFC标签读写功能,适用于门禁、支付、信息交换等场景。完整示例代码可参考鸿蒙官方文档中的NFC开发指南

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐