Tizen5.5手表如何使用HCE/SE功能模拟指定RFID卡ID
核心问题排查与修改方案
1. 核心概念误区纠正
你配置文件中填写的aid参数不是你需要自定义的卡片ID:
- 读卡器识别到的
AABBCCDD是NFC卡片的UID(唯一标识符),属于NFC底层通信的标识 - AID(应用标识符)是ISO 7816协议中用于区分卡内不同应用的标识,只有读卡器发送SELECT AID指令匹配到你注册的AID时,系统才会把通信事件转发给你的HCE应用,二者完全没有关联。
2. 现有配置与调用的错误点
- 你调用
nfc_manager_get_se_type返回NFC_SE_TYPE_ESE,说明当前卡模拟使用的是嵌入式安全单元(硬件SE),不是你需要的主机卡模拟(HCE)模式,因此HCE事件回调无法收到消息 - 你配置的
myrfid.xml中se_type="hce"和当前启用的ESE模式完全不匹配,配置不会生效 - wallet区块的作用是向系统注册你的HCE应用支持的AID列表,用于系统匹配读卡器的AID选择请求,和自定义UID无关。
3. 具体修改步骤
- 切换SE类型为HCE:调用
nfc_manager_set_se_type(NFC_SE_TYPE_HCE),切换后重新调用nfc_se_get_card_emulation_mode确认模式为开启状态 - 修正配置文件:将配置中的
aid改为符合ISO 7816规范的自定义私有AID(例如F011223344),不需要填写你要设置的UID值 - 添加必要权限:在应用manifest中添加两项权限:
http://tizen.org/privilege/nfc.cardemulation(普通卡模拟权限)http://tizen.org/privilege/nfc.admin(管理权限,用于修改SE类型、自定义UID,需要平台级签名才能使用)
- 自定义UID设置:Tizen 5.5穿戴设备的HCE扩展API支持自定义UID,调用
nfc_hce_set_uid(const unsigned char *uid, int uid_len)接口传入你要设置的11223344对应的字节数组即可 - 调整回调注册逻辑:切换到HCE模式后重新注册
nfc_manager_set_hce_event_cb,当读卡器匹配到你注册的AID后就能收到对应的通信事件。
4. 最终排查项
如果修改后仍无法正常工作,进入系统设置→NFC→卡模拟页面,确认你的应用被设置为默认卡模拟应用,避免系统将事件转发给默认钱包应用。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

