HarmonyOS学习路之开发篇—网络与连接(NFC开发 一)

简介: NFC(Near Field Communication,近距离无线通信技术) 是一种非接触式识别和互联技术,让移动设备、消费类电子产品、PC和智能设备之间可以进行近距离无线通信

NFC开发概述

NFC(Near Field Communication,近距离无线通信技术) 是一种非接触式识别和互联技术,让移动设备、消费类电子产品、PC和智能设备之间可以进行近距离无线通信。


HarmonyOS的NFC提供的功能有:


NFC基础查询:在进行NFC功能开发之前,开发者应该先确认设备是否支持NFC功能、NFC是否打开等基本信息。

访问安全单元(Secure Element,简称为SE):SE可用于保存重要信息,应用可以访问指定SE,并发送数据到SE上。

卡模拟:设备可以模拟卡片,替代卡片完成对应操作,如模拟门禁卡、公交卡等。

NFC消息通知:通过这个模块,开发者可以获取NFC开关状态改变的消息以及NFC的场强消息。

NFC基础查询

要进行NFC功能开发,需要设备支持NFC功能。


开发者可以通过NfcController类的方法isNfcAvailable()来确认设备是否支持NFC功能。如果设备支持NFC功能,可通过isNfcOpen()来查询NFC的开关状态。示例代码如下:

// 查询本机是否支持NFC
if (context != null) {
    NfcController nfcController = NfcController.getInstance(context);
} else {
    return;
}
boolean isAvailable = nfcController.isNfcAvailable();
if (isAvailable) {
    // 调用查询NFC是否打开接口,返回值为NFC是否是打开的状态
    boolean isOpen = nfcController.isNfcOpen();
}

访问安全单元

场景介绍

安全单元(Secure Element,简称为SE)可用于保存重要信息,应用或者其他模块可以通过接口完成以下功能:


获取安全单元的个数和名称。

判断安全单元是否在位。

在指定安全单元上打开基础通道。

在指定安全单元上打开逻辑通道。

发送APDU(Application Protocol Data Unit)数据到安全单元上。

接口说明

表1 NFC访问安全单元功能的的主要接口

image.png

image.png

开发步骤

1.调用SEService类的构造函数,创建一个安全单元服务的实例,用于访问安全单元。

2.调用isConnected()接口,查询安全单元服务的连接状态。

3.调用getReaders()接口,获取本机的全部安全单元。

4.调用Reader类的openSession()接口打开Session,返回一个打开的Session实例。

5.调用Session类的openBasicChannel(Aid aid)接口打开基础通道,或者调openLogicalChannel(Aid aid)接口打开逻辑通道,返回一个打开通道Channel实例。

6.调用Channel类的transmit(byte[] command),发送APDU到安全单元。

7.调用Channel类的closeChannel()接口关闭通道。

8.调用Session类的closeSessionChannels()接口关闭Session的所有通道。

9.调用Reader类的closeSessions()接口关闭安全单元的所有Session。

10.调用SEService类的shutdown()接口关闭安全单元服务。

private static final String ESE = "eSE";
private class AppServiceConnectedCallback implements SEService.OnCallback {
    @Override
    public void serviceConnected() {
        // 应用自实现
    }
}
// 创建安全单元服务实例
SEService sEService = new SEService(context, new AppServiceConnectedCallback());
// 查询安全单元服务的连接状态
boolean isConnected = sEService.isConnected();
// 获取本机的全部安全单元,并获取指定的安全单元eSE
Reader[] elements = sEService.getReaders();
Reader eSe = null;
for (int i = 0; i < elements.length; i++) {
    if (ESE.equals(elements[i].getName())) {
        eSe = elements[i];
        break;
    }
}
if (eSe == null) {
    return;
}
// 查询安全单元是否在位
boolean isPresent = eSe.isSecureElementPresent();
// 打开Session
Optional<Session> optionalSession = eSe.openSession();
Session session = optionalSession.orElse(null);
if (session == null) {
    return;
}
// 打开通道
if (eSe != null) {
    byte[] aidValue = new byte[]{(byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x05};
    // 创建Aid实例
    Aid aid = new Aid(aidValue, 0, aidValue.length); 
    // 打开基础通道
    Optional<Channel> optionalChannel = session.openBasicChannel(aid);
    Channel basicChannel = optionalChannel.orElse(null);
    // 打开逻辑通道
    optionalChannel = session.openLogicalChannel(aid);
    Channel logicalChannel = optionalChannel.orElse(null);
    // 发送指令给安全单元,返回值为安全单元对指令的响应
    byte[] resp = logicalChannel.transmit(new byte[]{(byte)0x00, (byte)0xa4, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00});
    // 关闭通道资源
    if (optionalChannel.isPresent()) {
        basicChannel.closeChannel();
    }
    if (optionalChannel .isPresent()) {
        logicalChannel.closeChannel();
    }
// 关闭Session资源
session.close();
// 关闭安全单元资源
eSe.closeSessions();
// 关闭安全单元服务资源
sEService.shutdown();
相关文章
|
8月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
244 0
|
7月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
10月前
|
索引 容器
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
在本案例中,我们将使用以下HarmonyOS NEXT组件: | 组件名称 | 功能描述 | | ------------- | -------------------------------------- | | `ColumnSplit` | 垂直分割布局容器,将界面分为上下两部分 | | `Column` | 垂直布局容器,用于垂直排列子组件 | | `Row` | 水平布局容器,用于水平排列子组件 | | `Scroll` | 滚动容器,用于在有限空间内展
164 3
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
|
10月前
|
UED 容器
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
在前两篇教程中,我们学习了如何使用HarmonyOS NEXT的`ColumnSplit`组件构建课程学习平台的基本布局,以及如何添加交互功能和状态管理。本篇教程将进一步深入,讲解课程学习平台的高级布局技巧和自适应设计,使应用能够在不同尺寸的设备上提供一致且优质的用户体验。
235 1
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
|
8月前
|
Windows
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
169 0
|
11月前
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
576 5
|
API 人机交互 Android开发
鸿蒙特效教程09-深入学习animateTo动画
本教程将带领大家从零开始,一步步讲解如何讲解 animateTo 动画,并实现按钮交互效果,使新手也能轻松掌握。
372 6
鸿蒙特效教程09-深入学习animateTo动画
|
JSON 前端开发 JavaScript
HarmonyOS NEXT 实战系列10-网络通信
本文介绍了网络通信相关知识,包括HTTP协议的工作原理、鸿蒙系统中HTTP模块的使用方法、Promise异步操作处理机制及async/await语法糖的应用,以及JSON数据格式的语法规则与转换方法。重点讲解了HTTP请求响应流程、鸿蒙开发中的网络权限申请与代码实现、Promise三种状态及创建方式,并通过示例说明异步编程技巧和JSON在数据传递中的应用。
379 10
|
安全 网络协议 网络安全
当虚拟机出现网络连接问题时,应该先检查Hyper-V的网卡连接配置
当虚拟机出现网络连接问题时,应首先检查Hyper-V的网卡配置。具体步骤包括:确认虚拟机运行状态、检查虚拟交换机类型和物理网卡连接、确保虚拟机网络适配器正确连接到虚拟交换机,并验证网络配置(IP地址等)。常见问题如虚拟交换机配置错误、网络适配器未连接或防火墙阻止连接,可通过重新配置或调整设置解决。必要时重启虚拟机和宿主机,查看事件日志或联系技术支持以进一步排查问题。
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
405 17

热门文章

最新文章

下一篇
开通oss服务