在OpenHarmony上开发的第一个应用-WIFI(上)
本次将分为上下两篇讲述在搭载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、开发工具等步骤将不再赘述,请参考我https://harmonyos.51cto.com/posts/5359
效果图
![]() |
![]() |
![]() |
![]() |
![]() |
内容
前期准备工作(重要,先注册好华为账号!):
1、注册华为账号(点击注册链接,运气好还有免费服务器和优惠折扣领取。)
2、选择“注册并关联”。
3、登录华为云,完成实名认证。(有企业的,强烈推荐企业实名认证,选择第一个快速认证,几分钟就搞定了。)
4、如果已有华为云账号,可以选择“已有账号,登录后关联”即可。(注:若关联不成功,必须重新注册新账号!!)
用刚注册的华为账号登录,操作即可!
上篇
- 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 主界面
主界面分为上下两部分,上部分为控制显示面板,下部分为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字段为方便界面调试而使用的字段,默认为空,为空时不显示
为分隔线控件,将左右两侧进行分割
右侧为一个组件显示状态信息,如WiFi连接/开启状态,该值为computed计算值,控件进行控制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列表稍微复杂一点,首先通过组件做了一个下拉功能,下拉时更新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 }
};
最后,按照惯例,随机送一波【福利】:折扣随机产生,永久有效。
免费领取云服务器/超低折扣链接
1、点击上面的注册链接。
2、选择“注册并关联”。
3、登录华为云,完成实名认证。(有企业的,强烈推荐企业实名认证,选择第一个快速认证,几分钟就搞定了。)
4、如果已有华为云账号,可以选择“已有账号,登录后关联”即可。(注:若关联不成功,必须重新注册新账号!!)
5、必须用这个链接关联,会有随机超级优惠【亲测永久有效】。
6、运气好,还有免费的服务器可用!
一定要按照链接注册并关联!!!(有其他更优惠的,可以留言给我!!)
在OpenHarmony上开发的第一个应用-WIFI(上)相关推荐
- 轻松云上开发:从IBM Cloud 开始!
在本文的开头,先给大家讲三个典故. 典故一:工欲善其事,必先利其器 "工欲善其事,必先利其器."是孔子的两句名言,指在做工作前如果能够选择到好的工具,那么,在工作的执行中就能得心应 ...
- OpenHarmony应用开发【01】
引言 因为个人的一些原因,好久也是没有碰OpenHarmony了,今天刚好有空,恰好也是调整好了自己的状态,所以就来开始继续更新了,然后这次开始,我也会从新开始将所有写过的东西,再进行一次梳理,至于为 ...
- SharePoint使用BCS开发你第一个应用程序(三)
SharePoint使用BCS开发你第一个应用程序(三) 创建外部内容类型. 创建外部内容类型有三种不同方式: 1. 在记事本上手写XML代码(不推荐). 2. 使用SharePoint Design ...
- 01-移动端开发教程-CSS3新特性(上)
1. 移动端开发课程概述 移动互联网的兴起,让移动端的开发迅速蹿红.对于前端开发者来说,移动端的开发已经占据了他们大部分工作时间.接下来老马带大家一起学习移动端开发的相关前端开发技术. 这边课程内容包 ...
- 在Visual Studio上开发Node.js程序
在Visual Studio上开发Node.js程序 原文:在Visual Studio上开发Node.js程序 [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studi ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
- azure模型训练_如何在Azure Machine Learning Studio上开发K-Means模型
azure模型训练 In this article, we will discuss the k-means algorithm and how can we develop a k-means mo ...
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 ...
- [翻译]现代java开发指南 第一部分
现代java开发指南 第一部分 第一部分:Java已不是你父亲那一代的样子 第一部分,第二部分,第三部分 =================== 与历史上任何其他的语言相比,这里要排除c语言和cobo ...
最新文章
- poj3694(双联通分量+LCA)
- linux s g文本替换问题
- UITabBarController的基本原理及使用(一)
- 推文科技:AI解决方案助力内容出海
- C# 使用Epplus导出Excel [4]:合并指定行
- 个人账目管理系统oracle,个人账务管理系统(论文).doc
- 计算机论文a会c会,参考文献代码大全
- 阿里云数据迁移工具解决方案:腾讯云迁移到阿里云
- C++学习(11)(综合题)
- html5canvas下绘制gif,JS+canvas操作gif动图
- 装配一台计算机有哪些安全注意事项,挤出机注意事项
- iPhone XS系列降价一千元;Intel雷电接口将融合USB4;蔚来汽车收入、亏损均增长百分百 | 雷锋早报...
- 使用 Minio Client 访问滴滴云 S3 对象存储
- python *args和**kwds
- matlab susan,SUSAN算法的matlab代码
- 常用ANSI控制码及其相关内容总结(转)
- 在js中循环遍历json对象
- python解析pdf文件
- 为什么量化分析要从线性回归开始
- 澳洲中学组织加密货币信息之夜
热门文章
- P1171 售货员的难题
- python keyboard hook_Keyboard Hook API函数 参数说明
- Android获取手机图片
- Windows环境下设置php环境变量
- c++filt command
- 一种非常好用的Android屏幕适配
- 批量压缩16万个文件夹为压缩包(.zip格式)
- linux 相对路径当前目录,Linux绝对路径和相对路径详解
- 【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)
- 单片机控制DS18B20自制简易电子温度计(测试通过)(二)