鸿蒙FA智能家居NFC碰一碰应用

系统
鸿蒙FA“NFC碰一碰”主要是利用NFC“碰一碰”唤起鸿蒙FA应用,根据NFC通信拿到的设备信息,然后登录关联华为账号,进行配网,配网成功后就可以实现远程控制。

[[411007]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

随着物联网时代的到来,鸿蒙发展越来越好,万物互联的时代即将到来。接下来将会讲讲我接触鸿蒙FA开发。

鸿蒙FA“NFC碰一碰”主要是利用NFC“碰一碰”唤起鸿蒙FA应用,根据NFC通信拿到的设备信息,然后登录关联华为账号,进行配网,配网成功后就可以实现远程控制。

1、首先我们创建一个js的Ability,如图显示。

鸿蒙FA智能家居NFC碰一碰应用-鸿蒙HarmonyOS技术社区

2、在entry的main->java包里的MainAbility的onStart和onNewIntent获取碰一碰的设备信息。代码如下:

  1. @Override 
  2.    public void onStart(Intent intent) { 
  3.        intent.setParam("window_modal",3); 
  4.        HmsBridge.getInstance().initBridge(this); 
  5.        // 获取sn和sessionId 
  6.        String nanSessionId = intent.getStringParam("nanSessionId"); 
  7.        // 注册配网har包 
  8.        NetConfigAbility.register(this, nanSessionId); 
  9.        Object businessInfo = intent.getParams().getParam("businessInfo"); 
  10.        String sn = ""
  11.        if (businessInfo != null) { 
  12.            ZSONObject businessInfoZson = ZSONObject.classToZSON(businessInfo); 
  13.            sn = businessInfoZson.getZSONObject("params").getString(""); 
  14.        } 
  15.        super.onStart(intent); 
  16.    } 
  1. @Override 
  2.   // Fa正在运行,又重新扫一次 
  3.   public void onNewIntent(Intent intent) { 
  4.       // 获取sn和sessionId 
  5.       String nanSessionId = intent.getStringParam("nanSessionId"); 
  6.       Object businessInfo = intent.getParams().getParam("businessInfo"); 
  7.       String sn = ""
  8.       if (businessInfo != null) { 
  9.           ZSONObject businessInfoZson = ZSONObject.classToZSON(businessInfo); 
  10.           sn = businessInfoZson.getZSONObject("params").getString(""); 
  11.       } 
  12.  } 

3、关联华为账号,华为授权登录流程图如下。

鸿蒙FA智能家居NFC碰一碰应用-鸿蒙HarmonyOS技术社区
  1. 下面是华为的登录授权接口和退出接口。 
  2. // -------------------华为授权登录---------------------- 
  3. 引入鸿蒙sdk 
  4. import {HuaweiIdAuthParamsHelper, HuaweiIdAuthManager, OPENID, PROFILE, GAMES, Scope} from '@hmscore/hms-js-account' 
  5.  
  6.     signIn: function () { 
  7.         var that = this 
  8.         // 新增scopeList 
  9.         var scopeList = new Array(); 
  10.         scopeList.push(OPENID); 
  11.         scopeList.push(PROFILE); 
  12.         var healthbehavior = new Scope("https://www.huawei.com/healthkit/extend/healthbehavior.read"); 
  13.         var hearthealthsleep = new Scope("https://www.huawei.com/healthkit/extend/hearthealthsleep.read"); 
  14.         var fatreduction = new Scope("https://www.huawei.com/healthkit/extend/fatreduction.read"); 
  15.         var sport = new Scope("https://www.huawei.com/healthkit/extend/sport.read"); 
  16.         scopeList.push(healthbehavior); 
  17.         scopeList.push(hearthealthsleep); 
  18.         scopeList.push(fatreduction); 
  19.         scopeList.push(sport); 
  20.  
  21.         var opencloud = new Scope("https://www.huawei.com/auth/smarthome/opencloud"); 
  22.         scopeList.push(opencloud); 
  23.  
  24.         var signInOption = new HuaweiIdAuthParamsHelper().setId().setProfile().setMobileNumber().setAuthorizationCode().setScopeList(scopeList).build(); 
  25.         console.error(JSON.stringify(signInOption)); 
  26.         HuaweiIdAuthManager.getAuthApi().getSignInIntent(signInOption).then((result)=>{ 
  27.  
  28.             var authCode = result.serverAuthCode; 
  29.             var accessToken = result.accessToken; 
  30.             var unionId = result.unionId; 
  31.         }).catch((error)=>{ 
  32.  
  33.         }); 
  34.     }, 
  35.     signOut: function () { 
  36.         HuaweiIdAuthManager.getAuthApi().signOut().then((result)=>{ 
  37.     
  38.         }).catch((error) => { 
  39.             console.error("signout fail"); 
  40.         }); 
  41.     }, 

4、关联华为账号后,开始配网了,主要是NAN和AP配网:

在第二步骤获取的nanSessionId,如果不是NAN_DEVICE_NOT_FOUND,那么可以走NAN配网流程,否则走Ap配网。具体配网步骤如下:

引入华为的配网模块。

 

NAN配网

  1. 操作设备上配网键让设备进入配网模式
  2. 手机碰一碰设备上的NFC标签,拉起轻应用
  3. 选择配网wifi
  4. 调用 discoveryByNAN接口 code为0
  5. 调用 connectDevice接口 连接设备
  6. 调用 configDeviceNet接口 开始配网
  7. 调用 disconnectDevice接口 断开网络
  8. 调用检测设备是否上线接口
  9. 检测到设备上线,调用绑定设备接口

AP配网

  1. 操作设备上配网键让设备进入配网模式
  2. 手机碰一碰设备上的NFC标签,拉起轻应用
  3. 选择配网wifi
  4. 调用 discoveryByNAN接口 code不为0
  5. 调用 discoveryBySoftAp接口 搜索当前设备的ap,搜索不到的话尝试直接去连接ap
  6. 调用 connectDevice接口 连接设备
  7. 调用 configDeviceNet接口 开始配网
  8. 调用 disconnectDevice接口 断开网络
  9. 调用检测设备是否上线接口
  10. 检测到设备上线,调用绑定设备接口

5、配完成功后就可以跳到设备控制页进行一些列的设备操控了。

6、过程运到的一些问题如下以及解决方案:

EMUI的版本下,如果串行显示多个弹窗的操作或者别的渲染时,会白屏?

  1. 解决方法是让某个视图稍微延时渲染。 

EMUI的版本下,有时如果界面渲染情况复杂,会出现某个div显示与否,在使用if来控制显示的时候,可能会出现白屏。

  1. 这种情况使用div的属性show会解决这个问题,用if的时候会改变渲染树的结构,使用show避免这个问题。 

在使用画布的时候,如果数据发生改变重绘制时,会出数据重绘错乱。

  1. 需要先清除绘制,然后在进行绘制 

在Ide升级到 Build Version: 2.1.0.501以上,在适配compileSdkVersion和compatibleSdkVersion版本时,不需要在config.js里设置了,config.js设置无效,得在build.grade里设置适配的版本好了。

以上主要是我们团队在开发鸿蒙FA智能家居NFC碰一碰应用时的一些问题和见解。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2022-12-23 20:46:37

遥控器应用鸿蒙

2022-01-17 14:51:20

鸿蒙HarmonyOS应用

2021-12-28 16:10:20

鸿蒙HarmonyOS应用

2022-05-19 15:47:24

碰一碰连接设备开发鸿蒙

2021-02-23 19:24:51

数字人民币碰一碰支付

2022-05-17 10:33:58

设备开发鸿蒙操作系统

2023-02-03 16:31:33

2021-03-20 22:11:16

数字人民币数字货币区块链

2021-02-07 11:36:44

智能家居物联网IOT

2022-10-25 14:51:11

设备开发鸿蒙

2021-04-27 13:58:03

数字人民币数字货币区块链

2022-05-12 14:22:39

NFC标签鸿蒙

2009-10-16 11:39:47

智能家居综合布线

2023-10-07 10:14:04

2019-12-24 19:31:27

智能家居物联网技术
点赞
收藏

51CTO技术栈公众号