HarmonyOS鸿蒙Next中NFC读取示例代码
HarmonyOS鸿蒙Next中NFC读取示例代码
介绍
本项目使用系统提供的NFC能力,简单实现了应用前台读卡效果,参考NFC标签读写开发指南。
效果预览
使用说明
安装到设备上后,开启NFC,打开应用,将NFC标签靠近设备即可。
实现思路
-
在入口Ability中注册前台读卡能力。
-
在BasicTagTest.ets中,对NFC_A、NFC_B、NFC_F、NFC_V、ISO_DEP类型标签进行处理(以NFCV为例)。
async doNfcVTagTest() { let nfcV: tag.NfcVTag = tag.getNfcV(this.tagInfo); if (nfcV === null || nfcV === undefined) { hilog.error(0x0000, 'TestTag', "[ReadTagTest-Demo] doNfcVTagTest nfcV is null"); return; } GlobalContext.getContext().setTextShow('\n\n### NfC_V Tag detailed protocol information:\n\n') let responseFlags: number = nfcV.getResponseFlags(); hilog.debug(0x0000, 'TestTag', "[ReadTagTest-Demo] doNfcVTagTest nfcV responseFlags= " + responseFlags); GlobalContext.getContext().setTextShow('\t\t' + 'responseFlag: ' + responseFlags + '\n') let dsfId: number = nfcV.getDsfId(); hilog.debug(0x0000, 'TestTag', "[ReadTagTest-Demo] doNfcVTagTest nfcV dsfId= " + dsfId); GlobalContext.getContext().setTextShow('\t\tdsfId: ' + dsfId + '\n'); let maxSendLength: number = nfcV.getMaxSendLength(); hilog.debug(0x0000, 'TestTag', "[ReadTagTest-Demo] doNfcVTagTest nfcV maxSendLength= " + maxSendLength); GlobalContext.getContext().setTextShow('\tmaxSendLength = ' + maxSendLength + ' bytes\n') }
-
在MifareTest.ets中,对MIFARE_CLASSIC类型标签进行处理。
async doMifareClassicTagTest(){...}//MIFARE Classic技术 async doMifareUlTagTest(){...}//MIFARE_ULTRALIGHT
-
在NdefTest.ets中,对NDEF类型标签进行处理。
async doNdefTagTest(){...}//NDEF技术
开发伙伴,你好。
我需要开发一个NFC读取的页面,按照官网的开发指导(https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/nfc-tag-access-guide-V5)按步骤开发,比如,已添加了权限:ohos.permission.NFC_TAG 等。在此过程中,遇到了问题。如下:
开发NFC读取NFC卡片遇到无法读取NFC卡片信息的问题,顶部弹框 “发现NFC标签 部分应用需开启内部NFC开关”,如图:
点击了弹框后,底部又出现“选择打开方式”,如图:
实际上,我已经开启 NFC 开关,如图:
这个是为什么呢?请帮忙指导一下。谢谢。
开发者您好,已收到您的问题反馈,当前已安排技术人员分析处理,请您耐心等待。
开发者您好,经测试,样例demo能正常前台读取NFC标签,请严格按照指南步骤设置。尤其是(4. 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能。)
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/nfc-tag-access-guide-V5#前台读取标签,
我解决了问题了。谢谢指导。
在HarmonyOS(鸿蒙)Next中,使用NFC读取数据的示例代码如下:
import ohos.nfc.NfcController;
import ohos.nfc.NfcTag;
import ohos.nfc.NfcTagCallback;
public class NfcExample {
private NfcController nfcController;
public void initNfc() {
nfcController = NfcController.getInstance();
nfcController.registerTagCallback(new NfcTagCallback() {
@Override
public void onTagDiscovered(NfcTag tag) {
// 处理读取到的NFC标签数据
String tagId = tag.getId();
// 其他处理逻辑
}
});
}
public void startNfc() {
if (nfcController != null) {
nfcController.start();
}
}
public void stopNfc() {
if (nfcController != null) {
nfcController.stop();
}
}
}
此代码展示了如何初始化NFC控制器、注册标签回调以及启动和停止NFC读取。在onTagDiscovered
方法中处理读取到的NFC标签数据。