HarmonyOS鸿蒙Next中在调用NFC功能的这几个api时全都报错这个

HarmonyOS鸿蒙Next中在调用NFC功能的这几个api时全都报错这个 【问题描述】:在调用NFC功能的这几个api时全都报错,请问下出现这个错误可能的原因是什么

【问题现象】:在调用NFC功能的这几个api时cke_3304.png报错cke_4368.png

【版本信息】:开发工具版本:DevEco Studio 6.0.2 Release 手机系统版本:6.0.0 Api语言版本:5.0.2(14)

【复现代码】:未涉及

【尝试解决方案】:未涉及


更多关于HarmonyOS鸿蒙Next中在调用NFC功能的这几个api时全都报错这个的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

开发者您好,错误码3100204表示:NFC芯片I/O异常,具体可参考官网文档:3100204 NFC芯片I/O异常

想跟您确认下,您是只有调MifareClassicTag这个技术类型标签对象才会报错吗,其他的会不会?看错误码的话就是NFC Tag不支持所执行的读写操作,可能是不支持这个技术类型标签对象,其他平台上也是操作的这个技术类型标签对象吗。 您方便的话,麻烦您在复现问题后,抓取一下完整的hilog日志信息帮助定位分析,可使用如下命令输出hilog日志,也麻烦您记录一下报错时间点:

hdc file recv /data/log/hilog ./hilog

更多关于HarmonyOS鸿蒙Next中在调用NFC功能的这几个api时全都报错这个的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这边验证过了读写功能是支持的,

开发者您好,想跟您确认下以下信息:

1、您报错3100204是否是在应用内报错的呢。 2、如果是在应用内报错的,需要您抓一下日志信息,复现在应用内报错3100204并提供复现时间点。

根据报错码分析

cke_146.png

在HarmonyOS Next中调用NFC API报错,通常是由于权限配置或API使用方式不正确。请检查以下几点:

  1. module.json5中已正确声明ohos.permission.NFC_TAG权限。
  2. module.json5abilities中为需要调用NFC的UIAbility配置了ohos.permission.NFC_TAG权限。
  3. 确保在代码中通过requestPermissionsFromUser动态申请了该权限。
  4. 确认设备支持NFC功能,且已开启。
  5. 检查导入的NFC相关模块(如@ohos.nfc.tagManager)是否正确,API调用参数是否符合规范。

从您提供的错误信息来看,主要问题是 NFC 服务未启动或权限配置不正确。错误码 801 通常表示系统服务不可用或调用失败。

核心原因分析:

  1. 权限声明缺失或未正确申请:HarmonyOS Next 对 NFC 功能有严格的权限控制。您需要在 module.json5 文件中声明并动态申请相关权限。
  2. NFC 开关未打开:在调用 NFC API 前,必须确保设备的 NFC 功能已在系统设置中开启。
  3. API 使用时机不当:可能在应用启动或前台状态不满足时过早调用了 NFC API。

具体解决步骤:

第一步:检查并配置权限 在您的项目 module.json5 文件中,确保已添加以下权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.NFC",
        "reason": "$string:reason_nfc", // 可选,说明使用原因
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      },
      {
        "name": "ohos.permission.NFC_TAG",
        "reason": "$string:reason_nfc_tag",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

并且,在首次使用 NFC 功能前,必须在代码中动态申请这些权限。

第二步:动态申请权限 在 Ability 的 onWindowStageCreate 或触发 NFC 操作的 UI 事件中,添加权限申请逻辑:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';

let context = getContext(this);
let atManager = abilityAccessCtrl.createAtManager();

// 需要申请的权限列表
let permissions: Array<string> = ['ohos.permission.NFC', 'ohos.permission.NFC_TAG'];

atManager.requestPermissionsFromUser(context, permissions).then((data) => {
  console.info('Permission request result:', data.authResults);
  // 权限授予后,再初始化 NFC 服务
  initNfcService();
}).catch((err: BusinessError) => {
  console.error('Failed to request permissions:', err.code, err.message);
});

第三步:检查 NFC 开关并初始化 在确保权限已授予后,检查 NFC 状态并获取服务:

import nfcController from '@ohos.nfc.controller';

async function initNfcService() {
  // 1. 检查 NFC 是否可用
  let isSupported = nfcController.isNfcAvailable();
  if (!isSupported) {
    console.error('NFC is not supported on this device.');
    return;
  }

  // 2. 打开 NFC
  try {
    await nfcController.openNfc();
    console.info('NFC opened successfully.');
    // 3. 此时可以安全调用其他 NFC API,例如 nfc.tag.startReading()
  } catch (error) {
    console.error('Failed to open NFC:', (error as BusinessError).message);
    // 提示用户去系统设置中手动开启 NFC
  }
}

第四步:配置文件检查 确保 module.json5 中已正确声明 NFC 相关特性:

{
  "module": {
    "abilities": [...],
    "requestPermissions": [...],
    "metadata": [
      {
        "name": "nfc",
        "value": "true"
      }
    ]
  }
}

总结: 请按以下顺序排查:

  1. 声明权限:在 module.json5 中静态声明 ohos.permission.NFCohos.permission.NFC_TAG
  2. 动态申请:在代码中调用 requestPermissionsFromUser 向用户申请权限。
  3. 检查开关:调用 nfcController.isNfcAvailable()openNfc() 确保硬件就绪。
  4. 调用 API:完成以上步骤后,再调用 nfc.tag.startReading() 等具体功能 API。

错误码 801 会在这几个前置条件不满足时出现。请重点检查权限申请流程和 NFC 开关状态。

回到顶部