WIFI =========================== 1. **简介** -------------- AIOT-3568A设有WiFi模块,可以直接搜索,也可接天线用于信号增幅。 WiFi模块以及如何连接天线如下: |image1| 2. **HDC相关指令** -------------- hdc指令可以用于查询WiFi的信息以及连接状态 .. code-block:: c++ hdc shell ifconfig 3. **标准API使用方法** -------------- .. note:: 本模块提供企业设备WiFi管理能力,包括查询WiFi开启状态等。首批接口从API version 10开始支持,接口仅可在Stage模型下使用。 + **WLAN标准接口** **@ohos.wifiManager (WLAN)** + **API使用说明** 使用WIFI相关API开发时候,需要先了解熟悉第一个open Harmony工程的创建,相关文档 :doc:`Hello World应用以及部署<../../Quick-Start/OpenHarmony/04-应用以及部署>` 在使用一个API时,需要注意以下几点: + API权限说明 + API的参数与返回值 + API调用错误的时候,参考API错误码和通用错误码 + API示例的正确使用 如下图所示,即为标准API文档 |wifiDemo| + **官方标准开发文档** `WIFI官方标准API开发文档 `_ 4. **社区Demo** -------------- + **简介** 为了帮助开发者更快速的使用板子开发和学习,我们在gitee上提供了一个WiFi相关的使用示例,每一个项目都是独立的DevEco Studio工程,开发者可以将工程导入到DevEco Studio中即可,通过浏览代码、编译工程、安装和运行应用示例来了解应用示例中涉及API的使用方法。 `giteeWIFI示例 `_ .. tip:: 在导入社区Demo工程的时候,需要开发者需要注意本地的开发环境是否与项目的一致,即本地SDK是否与项目SDK一致。 + **导入模块** 在使用WIFI标准API的时候,最重要的一步是导入WIFI的模块,才能使用WIFI相应的API接口。通常模块导入是在文件头导入 导入模块如下: **import wifiManager from '@ohos.wifiManager'** + **API 介绍** 社区Demo的实现引用以下API,实现如何打开WIFI、WIFI扫描,以及WIFI的连接的基本实现。 .. note:: 以下介绍均以为简单介绍API的系统能力以及对应函数 请结合 `giteeWIFI示例 `_ 和 `WIFI官方标准API开发文档 `_ 去熟悉开发 + **wifiManager.enableWifi(使能WLAN)** + isWifiActive(): boolean + 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.MANAGE_WIFI_CONNECTION 仅系统应用可用。 + **wifiManager.disableWifi(去使能WLAN)** + isWifiActive(): boolean + 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.MANAGE_WIFI_CONNECTION 仅系统应用可用。 + **wifiManager.startScan(启动WLAN扫描)** + startScan(): void + **wifiManager.getScanInfoList(获取扫描结果)** + getScanInfoList(): Array + 需要权限: ohos.permission.GET_WIFI_INFO + **wifiManager.isWifiActive(查询WLAN是否已使能)** + isWifiActive(): boolean + 需要权限: ohos.permission.GET_WIFI_INFO + **wifiManager.connectToDevice(连接指定网络)** + connectToDevice(config: WifiDeviceConfig): void + 需要权限: ohos.permission.SET_WIFI_INFO 和 ohos.permission.SET_WIFI_CONFIG 和 ohos.permission.MANAGE_WIFI_CONNECTION,仅系统应用可用。 + **Demo主要实现源码** + wifi.ets .. code-block:: TypeScript :linenos: import wifiManager from '@ohos.wifiManager'; import { MyDivider } from './MyDivider'; @Entry @Component struct Index { @State message: string = 'WiFi示例' private TAG: string = 'ShiMetaWifi' @State wifiStatus: string = 'null' @State wifiInfoList: string = '' @State passWord: string = '' @State account: string = '' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) Row() { Text('WIFI开关') .fontSize(50) .fontWeight(FontWeight.Bold) Toggle({ type: ToggleType.Switch, isOn: false }) .width(50) .height(50) .selectedColor('#007DFF') .switchPointColor('#FFFFFF') .onChange((isOn: boolean) => { if (isOn) { try { wifiManager.enableWifi(); } catch (error) { console.error("failed:" + JSON.stringify(error)); } } else { try { wifiManager.disableWifi(); } catch (error) { console.error("failed:" + JSON.stringify(error)); } } }) } .width('100%') .justifyContent(FlexAlign.SpaceAround) .padding(10) MyDivider(); Row() { Button('点击查询WIFI是否打开') .onClick(() => { let isWifiActive = wifiManager.isWifiActive(); if (isWifiActive) { this.wifiStatus = 'On' } else { this.wifiStatus = 'Off' } console.log(this.TAG, 'isWifiActive' + isWifiActive); }) Text(this.wifiStatus) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') .justifyContent(FlexAlign.SpaceAround) .padding(10) MyDivider(); Row() { Button('点击开始扫描') .onClick(() => { wifiManager.startScan() }) }.padding(10) Row() { Button('点击获取扫面结果') .onClick(() => { let scanInfoList = wifiManager.getScanInfoList(); this.wifiInfoList = JSON.stringify(scanInfoList) console.info("scanInfoList:" + JSON.stringify(scanInfoList)); }) }.padding(10) Row() { Button('点击清空') .onClick(() => { this.wifiInfoList = '' }) }.padding(10) Text(this.wifiInfoList) Column() { Row() { TextInput({ placeholder: '输入账号' }) .onChange((value: string) => { this.account = value; console.log(this.TAG, 'account :' + this.account) }) }.padding(10) Row() { TextInput({ placeholder: '输入密码' }) .onChange((value: string) => { this.passWord = value; console.log(this.TAG, 'passWord :' + this.passWord) }) }.padding(10) Button('连接WiFi') .onClick(() => { try { let config: wifiManager.WifiDeviceConfig = { ssid: this.account, preSharedKey: this.passWord, securityType: 3 } wifiManager.connectToDevice(config); } catch (error) { console.error("failed:" + JSON.stringify(error)); } }) }.width(500) } .width('100%') } .height('100%') } } 5. **代码编译** -------------- .. tip:: 代码编译详细流程可见,:doc:`Hello World应用以及部署<../../Quick-Start/OpenHarmony/04-应用以及部署>` 中的第二部分(构建第一个页面部分内容) 6. **代码运行效果** -------------- 用以上标准API接口实现WIFI Demo,如下图所示: |wifiIndex| .. |wifiIndex| image:: media1/wifiIndex.png :width: 5.75in :height: 3.92708in .. |image1| image:: media1/wifiImage.png :width: 5.75556in :height: 3.82639in .. |wifiDemo| image:: media1/wifiDemo.png :width: 5.75556in :height: 3.82639in