0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

搭载OpenHarmony2.0的3516开发板上开发的第一个Hap-WIFI

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:panda_coder 2021-06-30 09:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本次将分为上下两篇讲述在搭载 OpenHarmony2.0 的 3516 开发板上开发的第一个 Hap-WIFI,目前 Openharmony2.0 仅支持 JSUI,所以以下内容皆为 JSUI 开发。

源码码已上传至 gitee:

https://gitee.com/panda-coder/open-harmony-apps/tree/master/Wifi

现有不足之处为只能获取到 WiFi 的 ipv6,获取不到 ipv4,已提 issue。也是因为这个原因文章才发出,本想去研究 cpp 源码试着解决问题,奈何能力有限。后续会进一步完善,并加上开启热点等功能。

配置 SDK、开发工具等步骤将不再赘述,请参考:《在OpenHarmony2.0 上安装自己的系统应用》

e855d1fa-d91a-11eb-9e57-12bb97331649.png

内容

上篇:

WiFi 的界面排版

WiFi 的 JS-API

下篇:

自定义的键盘组件的开发讲解(OpenHarmony2.0 无系统输入法,input框无法输入)。①键盘的排版。②键盘的特殊功能键。③键盘数据回传-JS 自定义组件的事件传递。

代码目录

src

└─main

├─js

│ └─default

│ ├─common ----------------------- 公共库

│ ├─i18n

│ ├─images ----------------------- 图片资源

│ └─pages ----------------------- 页面及模块

│ ├─index --------------------- 主界面

│ ├─keyboard ------------------ 键盘模块

│ └─wifiItem ------------------ WiFi列表项模块

└─resources

└─base

├─element

└─media

布局排版

①index 主界面

e8674246-d91a-11eb-9e57-12bb97331649.png

主界面分为上下两部分,上部分为控制显示面板,下部分为 WiFi 列表:

wifi-info 为上部控制面板

wifi-list 为下半部 wifi 列表

dialog 分别为密码弹出/键盘弹窗

②wifi-info

《div class=“wifi-info” style=“align-content: center;justify-content: space-between;”》

《!--左侧wifi图片--》

《div style=“justify-content: center;align-items: center;width: 60%;flex-direction: column;”》

《image src=“。。/。。/images/wifi.png” style=“width:100px;height:100px;”》《/image》

《text style=“color: white;font-size: 30px;margin-top: 6px;”》WLAN 2.4GHz《/text》

《text》{{console}}《/text》

《/div》

《divider vertical=“true” style=“color: white;stroke-width:2px;padding: 30px 0px;”》《/divider》

《!--右侧WiFi详情--》

《div style=“justify-content: center; align-items: center;flex-direction: row;width: 100%;”》

《text style=“color: white;padding: 10px;margin-left: 10px;width: 80%;text-align: start;”》{{state}}《/text》

《switch textoff=“关闭” @change=“wifiSwitchChanged” texton=“开启” showtext=“true” checked=“{{ wifiInfo.isActive }}” style=“font-size: 20px;text-padding:6px;height: 80px;”》《/switch》

《/div》

《/div》

所有的 div 布局排版均为 flex 排版。左侧为一张 WiFi 图片,一段文字说明。console 字段为方便界面调试而使用的字段,默认为空,为空时不显示。

《divider》 为分隔线控件,将左右两侧进行分割右侧为一个 《text》 组件显示状态信息。

如 WiFi 连接/开启状态,该值为 computed 计算值,《switch》 控件进行控制 WiFi 的开启关闭。

③wifi-list

《div class=“wifi-list”》

《refresh refreshing=“{{isSaning}}” @pulldown=“refreshTouched”》

《list if=“{{wifiInfo.scanInfo && wifiInfo.scanInfo.length》0}}” 》

《list-item if=“{{connectItem && connectItem.ssid}}” style=“margin:0px 6px;padding: 10px 6px;width: 100%;justify-content: center;flex-direction: column;”》

《wifi-item @my-touched=“checkedWifi” style=“width: 100%;” value=“{{connectItem}}” checked=“true”》《/wifi-item》

《divider vertical=“false” style=“color: #D4D3D3;stroke-width:2px; margin-top: 6px;padding: 10px;”》《/divider》

《/list-item》

《list-item for=“{{WifiScanList}}” @touchstart=“listItemToucheStart” @touchmove=“itemMoved” tid=“id” style=“margin:0px 6px;padding: 10px 6px;width: 100%;justify-content: center;flex-direction: column;” 》

《wifi-item @my-touched=“checkedWifi” style=“width: 100%;” value=“{{$item}}”》《/wifi-item》

《divider vertical=“false” style=“color: #D4D3D3;stroke-width:2px; margin-top: 6px;padding: 10px;”》《/divider》

《/list-item》

《/list》

《text style=“justify-content: center;width: 100%;color: #959494;text-align: center;” else》当前无可用WIFI,请下拉刷新《/text》

《/refresh》

《/div》

WiFi 列表稍微复杂一点,首先通过 《refresh》 组件做了一个下拉功能,下拉时更新 wifi 扫描列表。

其次通过 list 和 list-item 组件配合将通过接口获取到的 WiFi 对象数组进行显示。

在显示的时候优先显示已连接数据,同时在下面的列表中排除已连接的,list-item 中使用自定义组件 wifi-item,并添加分割线组件进行分隔。

④wifiItem

布局代码:

《div class=“container” @touchend=“boxTouchend”》

《div class=“box”》

《div class=“box-left”》

《text class=“{{checked?‘isChecked’:‘’}}”》{{ssid}}《/text》

《text》{{desc}}《/text》

《/div》

《div class=“box-right”》

《image style=“width: 80px;height:80px;” src=“。。/。。/images/wifi-2.png”》《/image》

《/div》

《/div》《/div》

ischecked 判断当前是否为选中状态,加载选中的样式。

⑤dialog

第一个 dialog 为弹出输入密码框,第二个 dialog 为加载自定义的键盘组件,将在下一节进行讲解。

第一个 dialog:

《dialog id=“wifi_dialog” cancel=“hideInputPassword” style=“height: 280px;width:90%;margin-bottom: 50%;border-radius: 3px;”》

《div style=“flex-direction: column;padding: 12px;”》

《text style=“font-size: 36px;font-weight: bolder;padding: 15px 3px;”》{{checkedWifiName}}《/text》

《div》

《input placeholder=“请输入密码” @touchend=“showKeyBoard” value=“{{wifiPassword}}” style=“border-radius: 3px;”》《/input》

《/div》

《div style=“justify-content: center;”》

《button class=“btn btn-default” @touchend=“connect” 》连 接《/button》

《button class=“btn btn-primary” @touchend=“hideInputPassword”》取 消《/button》

《/div》

《/div》

《/dialog》

需要注意的是,dialog 下只能有一个根节点。input 类型为了方便,未采用密码形式,弱需要设为密码方式,在 input 组件上增加 type=“password” 特性即可,更多类型可参考官方文档。

JS API

WIFI 的官方仓库地址:

https://gitee.com/openharmony/communication_wifi

找到该仓库目录下的 interfaces/kits/jskits/@ohos.wifi.d.ts 文件可以看到对 JS 已提供的 api 接口信息(文件注释非常详细,就不再赘述)。

但需要注意的是,开发中引用 wifi api 并非 @ohos.wifi,而是 @ohos.wifi_native_js。

cpp 位置为 interfaces/innerkits/native_cpp/js_napi/wifi_js.cpp:

static napi_value Init(napi_env env, napi_value exports)

{

napi_property_descriptor desc[] = {

DECLARE_NAPI_FUNCTION(“enableWifi”, EnableWifi),

DECLARE_NAPI_FUNCTION(“disableWifi”, DisableWifi),

DECLARE_NAPI_FUNCTION(“isWifiActive”, IsWifiActive),

DECLARE_NAPI_FUNCTION(“scan”, Scan),

DECLARE_NAPI_FUNCTION(“getScanInfos”, GetScanInfos),

DECLARE_NAPI_FUNCTION(“addDeviceConfig”, AddDeviceConfig),

DECLARE_NAPI_FUNCTION(“connectToNetwork”, ConnectToNetwork),

DECLARE_NAPI_FUNCTION(“connectToDevice”, ConnectToDevice),

DECLARE_NAPI_FUNCTION(“disConnect”, DisConnect),

DECLARE_NAPI_FUNCTION(“getSignalLevel”, GetSignalLevel)

};

NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc));

return exports;

}

static napi_module wifiJsModule = {

.nm_version = 1,

.nm_flags = 0,

.nm_filename = NULL,

.nm_register_func = Init,

.nm_modname = “wifi_native_js”,

.nm_priv = ((void *)0),

.reserved = { 0 }

};

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IPv6
    +关注

    关注

    6

    文章

    727

    浏览量

    62357
  • WIFI
    +关注

    关注

    82

    文章

    5470

    浏览量

    212043
  • 源码
    +关注

    关注

    8

    文章

    682

    浏览量

    31098
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1094

    浏览量

    51208
  • OpenHarmony
    +关注

    关注

    31

    文章

    3927

    浏览量

    20726
  • OpenHarmony 2.0
    +关注

    关注

    0

    文章

    7

    浏览量

    993

原文标题:我在OpenHarmony上开发的第一个应用

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    触觉智能Purple Pi OH开发板率先适配OpenHarmony6.0 Release,鸿蒙明星开发板

    2025年9月19日,在官网上线开源鸿蒙OpenHarmony6.0Release仅13天,触觉智能宣布旗下PurplePiOH开发板成功完成OpenHarmony6.0Release系统适配。这
    的头像 发表于 10-29 08:00 369次阅读
    触觉智能Purple Pi OH<b class='flag-5'>开发板</b>率先适配<b class='flag-5'>OpenHarmony</b>6.0 Release,鸿蒙明星<b class='flag-5'>开发板</b>

    迅为Hi3516CV610开发板强劲内核-海思Hi3516CV610核心

    迅为Hi3516CV610开发板强劲内核-海思Hi3516CV610核心
    的头像 发表于 09-30 15:19 1710次阅读
    迅为Hi<b class='flag-5'>3516</b>CV610<b class='flag-5'>开发板</b>强劲内核-海思Hi<b class='flag-5'>3516</b>CV610核心<b class='flag-5'>板</b>

    【汇思博SEEK100开发板试用体验】3/第一次使用OpenHarmony

    本分享贴,聚焦第一次上手的时候,可能出现的些问题,希望对其他小伙伴也有帮助。 ​​、创建首个OpenHarmony工程​​ ​​选择开发
    发表于 08-20 22:21

    【汇思博SEEK100开发板试用体验】01 SEEK100开发板开箱&amp;简介

    前言 今天刚收到SEEK100开发板,非常感谢汇思博和发烧友论坛给的这次开发板评测机会。这张开发板是出厂搭载OpenHarmony 5.0
    发表于 07-03 22:28

    开鸿开发板深度体验:从开源鸿蒙开发到AI场景实践

    开鸿开发板KaihongBoard-3588S-SBCKaihongBoard-3576-SBC体验开源鸿蒙能力学习开源鸿蒙开发●●●搭载KaihongOS
    的头像 发表于 07-03 17:03 1201次阅读
    开鸿<b class='flag-5'>开发板</b>深度体验:从开源鸿蒙<b class='flag-5'>开发</b>到AI场景实践

    搭载OpenHarmony 5.0系统!视美泰M-K1HSE开发板免费试用

    搭载OpenHarmony 5.0系统!视美泰M-K1HSE开发板免费试用,可以到这里申请体验,申请地址:https://bbs.elecfans.com/try_MK1HSE.html
    发表于 05-28 17:53

    贝启BQ3568HM 开发板被选用为 OpenHarmony 明星开发板

    经开放原子开源基金会OpenHarmony社区官方测评评选,贝启科技BQ3568HM开源鸿蒙开发板被正式选用为OpenHarmony明星开发板。BQ3568HM开源鸿蒙
    的头像 发表于 05-25 00:22 1205次阅读
    贝启BQ3568HM <b class='flag-5'>开发板</b>被选用为 <b class='flag-5'>OpenHarmony</b> 明星<b class='flag-5'>开发板</b>

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制FLASH外设

    1、实验简介本实验将演示如何在小凌派-RK2206开发板使用IOT库的FLASH接口,进行FLASH编程开发。例程将创建任务,实现FL
    的头像 发表于 04-22 14:49 696次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外设

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制GPIO中断

    1、实验简介本实验将演示如何在小凌派-RK2206开发板使用IOT库的GPIO中断模式,进行GPIO编程开发。例程将创建任务,通过配置
    的头像 发表于 04-21 10:39 897次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO中断

    Linux开发板CAN总线测试方法,触觉智能RK3568开发板演示

    本文介绍Linux开发板CAN总线测试方法,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持
    的头像 发表于 04-11 19:14 922次阅读
    Linux<b class='flag-5'>开发板</b>CAN总线测试方法,触觉智能RK3568<b class='flag-5'>开发板</b>演示

    基于小凌派RK2206开发板OpenHarmony如何使用IoT接口控制GPIO外设

    1、案例简介本案例主要是如何在小凌派-RK2206开发板使用IOT库的GPIO接口,进行GPIO编程开发。例程将创建任务,通过配置GP
    的头像 发表于 04-11 15:36 1625次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO外设

    北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构

    北京迅为RK3568开发板OpenHarmony系统南向驱动开发内核HDF驱动框架架构
    的头像 发表于 03-11 14:13 1565次阅读
    北京迅为RK3568<b class='flag-5'>开发板</b><b class='flag-5'>OpenHarmony</b>系统南向驱动<b class='flag-5'>开发</b>内核HDF驱动框架架构

    【贝启科技BQ3568HM开源鸿蒙开发板深度试用报告】1 - 开箱测试和技术资料准备

    中的“abiFilters”参数中需要至少包含armeabi/armeabi-v7a中的类型。也就是说虽然该开发板64位的ARM
    发表于 01-21 11:17

    OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

    本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程,触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树莓派卡片电脑设计,支持开
    的头像 发表于 12-30 10:08 1534次阅读
    <b class='flag-5'>OpenHarmony</b>源码编译后烧录镜像教程,RK3566鸿蒙<b class='flag-5'>开发板</b>演示

    OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

    开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全
    的头像 发表于 12-24 11:46 1099次阅读
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?触觉智能RK3566鸿蒙<b class='flag-5'>开发板</b>演示