HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?
HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决? 【问题描述】:hce应用前台刷卡 ,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?
【问题现象】:
C00301/com.mid…hce/Nfc_Core com.midu.nfc.hce E
[(IsDefaultService:72)]IsDefaultService: unsupported card type
【版本信息】:不涉及
【复现代码】:使用的是官方demo,参考链接:HCE卡模拟开发指南-NFC-Connectivity Kit(短距通信服务)-网络-系统 - 华为HarmonyOS开发者
【尝试解决方案】:配置了声明卡类型元数据
更多关于HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
根据demo尝试复现,使用TagInfo读卡,未复现问题,HCE的交互是正常的。
请提供如下信息:
请与门禁供应商沟通,确认门禁卡与门禁之间是否存在交互逻辑。如存在交互逻辑,请提供具体交互信息方便接下来的分析。
更多关于HarmonyOS鸿蒙Next中hce应用前台刷卡,发现无法接收到刷卡事件信息,报错IsDefaultService: unsupported card type如何解决?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
该错误表明HCE(主机卡模拟)应用无法识别当前NFC卡类型,导致前台刷卡事件无法正常接收。以下是完整排查方案:
- 检查卡类型兼容性
确认设备支持的卡类型
在 module.json5中检查 host_emulation配置是否包含当前卡类型(如 TECH_ISO_DEP):
{
"extensionAbilities": [
{
"metadata": [
{
"name": "host_emulation",
"value": {
"capability": ["TECH_ISO_DEP"] // 确保包含实际卡类型
}
}
]
}
]
}
常见支持类型: TECH_ISO_DEP(ISO 14443-4) TECH_NFC_A(NFC-A) TECH_NFC_B(NFC-B)
- 验证权限与声明
添加必备权限
在 module.json5中声明:
"requestPermissions": [
{
"name": "ohos.permission.NFC_CARD_EMULATION"
}
]
配置前台服务
确保 HCE 服务声明为前台服务:
"abilities": [
{
"backgroundModes": ["nfc"]
}
]
- 代码层排查
检查 HostCardEmulationService实现
确认 onHostApduReceived方法正确处理指令:
import hce from '@kit.ConnectivityKit';
class MyHceService extends hce.HostCardEmulationService {
onHostApduReceived(apdu: number[]): number[] {
console.log("Received APDU: " + apdu);
return [0x90, 0x00]; // 返回成功响应
}
}
注册服务到前台
在 onCreate中激活服务:
import Ability from '@ohos.app.ability.UIAbility';
export default class MainAbility extends Ability {
onCreate() {
// 启动前台服务
this.context.startServiceExtensionAbility({
bundleName: "your.bundle.name",
abilityName: "MyHceService"
});
}
}
- 设备与卡片兼容性测试
测试不同卡类型
尝试刷写以下卡片验证兼容性: ISO 14443 Type A 卡(如 MIFARE Classic) ISO 14443 Type B 卡(如身份证)
检查设备 NFC 支持
在设备设置中确认: NFC 开关已开启 默认付款应用已选择当前 HCE 应用
- 高级调试步骤
抓取 NFC 通信日志
使用 hdc命令捕获底层通信:
hdc shell hilog | grep "Nfc_Core"
检查 AID 路由冲突
确保 aid_list未与其他应用冲突:
"metadata": {
"host_emulation": {
"aid_list": ["A000000333010101"] // 唯一应用标识
}
}
最终验证完成上述步骤后: 重启设备 NFC 服务 重新激活 HCE 前台服务 使用兼容性卡片测试刷卡事件
该错误表明HCE应用无法识别当前刷卡卡类型。请检查以下配置:
- 在
ohos.permission.NFC_TAG权限基础上,确保已声明ohos.permission.NFC_CARD_EMULATION权限。 - 在
config.json中正确配置AID路由,确认AID列表与刷卡设备支持的卡类型匹配。 - 验证
isDefaultServiceForCategory()方法返回正确值,确保应用被设为默认支付应用。 - 检查设备NFC功能是否已开启,并支持对应卡模拟协议。
若配置无误,可尝试重启NFC服务或设备。
该报错 IsDefaultService: unsupported card type 表明系统在判断是否为默认服务时,未能识别到支持的卡类型。这通常是由于HCE应用的元数据配置与实际的NFC刷卡类型不匹配导致的。
根据您提供的截图,您已配置了 aid_list。请重点检查以下配置项:
-
确认
nfc_card_emulation配置正确:在module.json5文件的abilities标签下,确保nfc_card_emulation配置包含aid_list和正确的type属性。type必须明确指定为"payment"或"other"。"abilities": [ { ... "skills": [ { "actions": [ "ohos.want.action.nfc.card.emulation" ] } ], "metadata": [ { "name": "nfc_card_emulation", "value": "{\"aid_list\":[\"F0010203040506\", \"A0000000041010\"], \"type\":\"payment\"}" } ] } ] -
核对AID值:确保
aid_list中的AID(应用标识符)与您刷卡设备(如POS机)所寻址的AID完全一致,包括字母大小写和长度。常见的支付AID如"A0000000031010"。不匹配的AID会导致服务不被触发。 -
检查前台服务权限:HCE前台刷卡需要应用在运行时保持前台服务。请确保您的应用已正确申请并启动了前台服务,且服务类型声明为
nfc。"module": { ... "requestPermissions": [ { "name": "ohos.permission.NFC_CARD_EMULATION" } ] } -
验证设备支持:确认您的HarmonyOS Next设备硬件支持NFC功能,并且系统设置中已开启NFC。
核心排查点在于元数据 nfc_card_emulation 的 aid_list 和 type 配置是否准确、完整,并与刷卡终端匹配。

