wifiMgr

来自于:开发者立即使用

getCurWifiInfo getWifiState openWifi closeWifi toWifiSettingView scanWifis getConfiguredNetworks connect disConnect removeNetwork disableNetwork getWifiPassword getConnectionType addWifiStateListener removeWifiStateListener addNetChangedListener removeNetChangedListener

论坛示例

为帮助用户更好更快的使用模块,论坛维护了一个示例,示例中包含示例代码供您参考。

概述

wifiMgr封装了与wifi有关的一系列接口,可实现手机自带的“设置”中连接wifi的功能,并附加了监听wifi开关状态、网络状态变化的接口,支持获取当前连接的wifi信息、扫描附近的wifi列表、获取已配置的wifi密码、连接指定的wifi等功能,开发者调用该模块可实现与wifi有关的功能。由于苹果安全机制,ios暂时不开放获取wifi列表和链接wifi的等功能接口。

模块测试widget下载链接https://community.apicloud.com/bbs/thread-123938-1-1.html

模块接口

getCurWifiInfo

获取当前已连接的wifi的信息,由于ios的安全机制,ios只能获取ssid、bssid和ipAddr。对于Android 9.0及以上的版本,要想能够获取ssid(ssid就是wifi名字)必须进行以下2步操作。第一:必须打开手机的gps,目前手机只能手动打开gps,开发者可用代码打开手机设置中gps开关的界面引导用户打开gps,有关打开gps的功能请参考模块store中的gps模块。第二:在apicloud的”云编译”界面编译时注意给app设置”位置”权限(在”平台”两个字右边的安卓小机器人图片所在的方框内可以设置 位置权限)。Android9.0及以上除了ssid外的其他信息不需要打开gps就能获取。

关于iOS12及以上使用该接口的说明

在iOS12及以上使用该接口必须按照以下2个步骤才能使用:

1、登录苹果开发者账号后台https://developer.apple.com,找到App IDs选项,在该项下找到Access WiFi Information选项并勾选上,如下图,表示该App需要获取wifi信息。然后重新生成项目的描述文件(Provisioning Profiles),具体操作见官方文档 iOS证书及描述文件制作流程 https://docs.apicloud.com/Dev-Guide/iOS-License-Application-Guidance
wifiMgr - 图1
2、配置 entitlement 文件。在widget\res(如果没有res文件夹则要先创建res文件夹)下创建文件名为UZApp.entitlements的文件,该文件需要和widget代码一起进行云编译,UZApp.entitlements内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>com.apple.developer.networking.wifi-info</key>
  6. <true/>
  7. </dict>
  8. </plist>

getCurWifiInfo(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回当前已连接的wifi的信息
  • 内部字段:
  1. //ios只能获取ssid、bssid和ipAddr。
  2. {
  3. "result": 1,//获取成功状态 0失败 1成功
  4. "data": //获取成功时放回data字段
  5. {
  6. "encrypt": "[WEP][ESS]", // 安全性
  7. "status":"已连接",//连接状态
  8. "rssi": -45, // 信号强度
  9. "linkSpeed": 54,//连接速度
  10. "ipAddr": "192.168.1.87",//IP地址
  11. "bssid": "70:f9:6d:37:c1:72",//Ap MAC
  12. "networkId": 12,//网络ID
  13. "ssid": "AP-GWWG",//wifi名字
  14. "hiddenSSID": false,//是否隐藏wifi名字
  15. "hardAddr": "A0:86:C6:0C:07:4A",//本机MAC
  16. "name": "wlan0/wlan0",//Wifi接口名 Name和DisplayName
  17. "netmask": "255.255.255.192",////网络掩码
  18. "gateway": "192.168.1.126",//网关
  19. "dns1": "202.103.224.68", //DNS1
  20. "dns2": "202.103.225.68" //DNS2
  21. },
  22. "msg":"wifi已关闭" //获取失败时返回msg字段,msg为获取错误的原因
  23. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.getCurWifiInfo(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getWifiState

获取wifi开关当前状态

getWifiState(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回wifi开关当前状态
  • 内部字段:
  1. {
  2. "status":"WIFI_STATE_ENABLED"//字符串类型,wifi的状态 ,取值范围如下:
  3. WIFI_STATE_ENABLED 已开启
  4. WIFI_STATE_ENABLING 正在开启
  5. WIFI_STATE_DISABLED 已关闭
  6. WIFI_STATE_DISABLING 正在关闭
  7. WIFI_STATE_UNKNOWN 未知状态
  8. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.getWifiState(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

openWifi

打开wifi开关

openWifi(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回是否打开wifi成功
  • 内部字段:
  1. {
  2. "result":1 //int类型,是否打开成功 ,取值范围如下:
  3. // 0 打开失败
  4. // 1 打开成功
  5. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.openWifi(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

closeWifi

关闭wifi

closeWifi(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回关闭wifi是否成功
  • 内部字段:
  1. {
  2. "result":1 //int类型,是否关闭成功 ,取值范围如下:
  3. //0 关闭失败
  4. //1 关闭成功
  5. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.closeWifi(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

toWifiSettingView

打开手机自带“设置”界面

toWifiSettingView(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回打开“设置”界面是否成功
  • 内部字段:
  1. {
  2. "result":1 //int类型,是否打开成功 ,取值范围如下:
  3. //0 打开失败
  4. //1 打开成功
  5. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.toWifiSettingView(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

scanWifis

扫描获取附近的wifi列表,开发者可自行定时扫描获取,如间隔1秒扫描一次。

scanWifis(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回扫描是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否扫描成功 ,取值范围如下:
  3. // 0 扫描失败
  4. // 1 扫描成功
  5. "wifiList": [ //扫描到的wifi列表
  6. {
  7. "ssid": "wifiName",//wifi名字
  8. "bssid": "e7:d3:52:f0:80:b0",//Ap MAC
  9. "frequency": 2462,//频率
  10. "level": -44,//信号强度
  11. "capabilities": "[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]"//加密方式
  12. },
  13. ...
  14. ]
  15. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.scanWifis(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持android平台

可用性

Android系统

可提供的1.0.0及更高版本

getConfiguredNetworks

获取已配置wifi列表。

getConfiguredNetworks(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回获取是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否获取成功 ,取值范围如下:
  3. //0 获取失败
  4. //1 获取成功
  5. "configuredNetworks": [ //获取到的wifi列表
  6. {
  7. "ssid": "\"MI2\"",//wifi名字,注意此处有双引号
  8. "hiddenSSID": false,//wifi名字是否隐藏
  9. "networkId": 11,//网络id,每个连上的wifi都有一个唯一的networkId
  10. "priority": 3177,//优先级
  11. "status": 2,//状态
  12. "preSharedKey": "*"//wifi密码,此处密码不可见
  13. },
  14. ...
  15. ]
  16. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.getConfiguredNetworks(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

connect

连接指定的wifi。如果要连接的wifi是已配置过的(已保存有密码且密码正确,getConfiguredNetworks方法可获取),则只需传入ssid,不需传入pwd和capabilities;如果要连接的wifi是没配置过的无密码保护类型的wifi,则只需传入ssid和capabilities,不需传入pwd。

connect({params},callback(ret))

param

ssid:

  • 类型:字符串
  • 描述:(必选)wifi的ssid(wifi名字)

pwd:

  • 类型:字符串
  • 描述:wifi密码。如果要连接的wifi是已配置过的(已保存有密码且密码正确),或者是无密码的wifi,则该参数可不传,反之则要传入该参数

capabilities:

  • 类型:字符串
  • 描述:密码保护类型;需要与要连接的wifi保护类型一致,如果要连接的wifi是已配置过的(已保存有密码且密码正确),则该参数可不传,反之则要传入该参数(没配置过的无密码保护类型的wifi也要传入该参数)。当要传入该参数时,有两种方法获取该参数:

    1.第一种方式:

    可从上面的scanWifis方法返回的列表中获取。

    2.第二种方式:

    直接传入密码保护类型(前提是开发者知道wifi的密码保护类型),传入的密码保护类型要与wifi实际的密码保护类型一致(可通过登录路由器查询),直接传入的取值范围如下:

    1、”NOPASS” (无密码);

    2、”WEP”(wep保护类型);

    3、”WPA” (wpa保护类型) 。

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回连接是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否连接成功 ,取值范围如下:
  3. //0 连接失败,5秒内未连接成功则认为连接失败,
  4. // 开发者也可以自己判断wifi连接是否成功,方法:使用addNetChangedListener,当网络状态发生变化时使用
  5. // 方法getCurWifiInfo获取当前wifi名字判断,若连接不成功,监听到的网络状态为手机流量网络或无网络。
  6. //1 连接成功
  7. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. //param = {ssid:"wifi_love",pwd:"2016102828",capabilities:"WEP"};//未连接过的wifi,直接传入capabilities方式。
  3. //param = {ssid:"wifi_love",pwd:"2016102828",capabilities:"[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]"};//未连接过的wifi,从上面的scanWifis方法返回的列表中获取capabilities。
  4. param = {ssid:"wifi_love"};//已配置过的(已保存有密码且密码正确)
  5. //param = {ssid:"wifi_love",capabilities:"WPA"};//无密码的wifi
  6. wifi.connect(param, function(ret, err){
  7. alert(JSON.stringify(ret));
  8. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

disConnect

断开当前连接的wifi。

disConnect(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回断开当前连接的wifi是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否断开成功 ,取值范围如下:
  3. // 0 断开失败
  4. // 1 断开成功
  5. "msg": "" //字符串,断开成功时返回"",断开失败时返回错误提示
  6. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.disConnect(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

removeNetwork

清除指定的wifi网络(清除密码),要清除的wifi必须是已配置过的(getConfiguredNetworks方法可获取的)。当Android系统版本小于6.0时,该方法可以无条件(无条件是指相对于系统版本大于等于6.0的系统)清除指定的wifi网络(同样是已配置过的wifi);当Android系统版本大于等于6.0时,根据Google在Android6.0上的变动(官方文档说明https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-network,如下文),,) Android6.0及以上版本不能清除由非本应用创建的wifi连接,即本应用可以调用该方法清除由connect方法创建的wifi连接,由其他应用或用户在系统wifi设置界面手动连接的wifi,调用该方法都不能清除成功。

Android6.0的变动:
Your apps can now change the state of WifiConfiguration objects only if you created these objects. You are not permitted to modify or delete WifiConfiguration objects created by the user or by other apps.

removeNetwork({params},callback(ret))

param

ssid:

  • 类型:字符串
  • 描述:(必选)wifi的ssid(wifi名字)

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回清除是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否清除成功 ,取值范围如下:
  3. 0 清除失败
  4. 1 清除成功
  5. "msg": "" //字符串,清除成功时返回"",清除失败时返回错误提示
  6. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. param = {ssid:"wifi_love"};
  3. wifi.removeNetwork(param,function(ret, err){
  4. alert(JSON.stringify(ret));
  5. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

disableNetwork

禁用指定的wifi网络,要禁用的wifi必须是已配置过的(getConfiguredNetworks方法可获取)。

disableNetwork({params},callback(ret))

param

ssid:

  • 类型:字符串
  • 描述:(必选)wifi的ssid(wifi名字)

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回禁用是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否禁用成功 ,取值范围如下:
  3. //0 禁用失败
  4. //1 禁用成功
  5. "msg": "" //字符串,禁用成功时返回"",禁用失败时返回错误提示
  6. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. param = {ssid:"wifi_love"};
  3. wifi.disableNetwork(param,function(ret, err){
  4. alert(JSON.stringify(ret));
  5. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

getWifiPassword

获取指定wifi的密码,手机需要Root且调用该方法后应用请求获取root权限(弹框方式弹出),用户同意获取root权限后方可获取密码。

getWifiPassword({params},callback(ret))

param

ssid:

  • 类型:字符串
  • 描述:(必选)wifi的ssid(wifi名字)

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回密码相关信息
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否获取成功 ,取值范围如下:
  3. // 0 获取失败
  4. // 1 获取成功
  5. "pwd": "123456", //result=1时返回,字符串,wifi密码
  6. "msg": "手机未root" //result=0时返回,字符串,获取失败的错误提示
  7. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. param = {ssid:"wifi_love"};
  3. wifi.getWifiPassword(param,function(ret, err){
  4. alert(JSON.stringify(ret));
  5. });

补充说明

此接口仅支持android平台

可用性

Android系统

可提供的1.0.0及更高版本

getConnectionType

获取当前网络类型,可用于判断当前手机网络是wifi还是手机流量。

getConnectionType(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回当前网络类型信息
  • 内部字段:
  1. "result": 1, //int类型,是否获取成功 ,取值范围如下:
  2. // 1 获取成功
  3. "type": "CONNECTION_TYPE_WIFI", //字符串 ,取值范围如下:
  4. CONNECTION_TYPE_WIFI//wifi网络
  5. CONNECTION_TYPE_MOBILE//手机流量
  6. CONNECTION_TYPE_NULL//无网络连接

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.getConnectionType(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

addWifiStateListener

监听wifi开关状态。调用该方法立即返回是否监听成功,即立即回调callback(ret)方法,当wifi开关状态变化时会回调onWifiStateChanged(state)方法,开发者需要自己实现onWifiStateChanged(state)方法。该方法需与removeWifiStateListener方法成对出现,在适当的时候移除监听,即有添加就有移除。

addWifiStateListener(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回是否监听成功
  • 内部字段:
  1. "result": 1, //int类型,是否监听成功 ,取值范围如下:
  2. // 1 监听成功
  3. "msg": //字符串,提示信息,取值范围如下:
  4. "添加成功""重复添加监听"

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.addWifiStateListener(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });
  5. //wifi开关状态变化时的回调方法
  6. function onWifiStateChanged(state){
  7. alert(JSON.stringify(state));
  8. }

onWifiStateChanged(state)

该方法开发者需自己实现,当wifi开关状态变化时会回调该方法

state:

  • 类型:字符串
  • 描述:当前wifi开关状态,取值范围如下:

    1. WIFI_STATE_ENABLED 已开启
    2. WIFI_STATE_ENABLING 正在开启
    3. WIFI_STATE_DISABLED 已关闭
    4. WIFI_STATE_DISABLING 正在关闭
    5. WIFI_STATE_UNKNOWN 未知状态

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

removeWifiStateListener

移除wifi开关状态的监听。调用addWifiStateListener方法后,需在适当的时候移除监听,即有添加就有移除。

removeWifiStateListener(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回移除wifi开关状态监听是否成功
  • 内部字段:
  1. "result": 1, //int类型,是否移除监听成功 ,取值范围如下:
  2. // 1 移除成功
  3. "msg": "移除成功", //字符串 ,取值范围如下:
  4. "移除成功""尚未添加监听"

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.removeWifiStateListener(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

addNetChangedListener

监听网络状态。调用该方法立即返回是否监听成功,即立即回调callback(ret)方法,当网络状态变化时会回调onNetChanged(state)方法,开发者需要自己实现onNetChanged(state)方法。该方法需与removeNetChangedListener方法成对出现,在适当的时候移除监听,即有添加就有移除。

addNetChangedListener(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回是否监听成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否监听成功 ,取值范围如下:
  3. // 1 监听成功
  4. "msg": //字符串,提示信息,取值范围如下:
  5. "添加成功""重复添加监听"
  6. }

示例代码

  1. {
  2. var wifi = api.require('wifiMgr');
  3. wifi.addNetChangedListener(function(ret, err){
  4. alert(JSON.stringify(ret));
  5. });
  6. //网络状态变化时的回调方法
  7. function onNetChanged(state){
  8. alert(JSON.stringify(state));
  9. }
  10. }

onNetChanged(state)

该方法开发者需自己实现,当网络状态变化时(网络从有到无,或从无到有,或wifi和4g网络之间切换时)会回调该方法。 state:

  • 类型:字符串
  • 描述:当前网络状态,取值范围如下:

    1. TYPE_WIFI wifi网络
    2. TYPE_ETHERNET 有线网络
    3. TYPE_MOBILE 手机流量网络
    4. TYPE_NULL 无网络连接

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本

removeNetChangedListener

移除网络状态的监听。调用addNetChangedListener方法后,需在适当的时候移除监听,即有添加就有移除。

removeNetChangedListener(callback(ret))

callback(ret)

ret:

  • 类型:JSON对象
  • 描述:返回移除网络状态监听是否成功
  • 内部字段:
  1. {
  2. "result": 1, //int类型,是否移除监听成功 ,取值范围如下:
  3. // 1 移除成功
  4. "msg": "移除成功" //字符串 ,取值范围如下:
  5. "移除成功""尚未添加监听"
  6. }

示例代码

  1. var wifi = api.require('wifiMgr');
  2. wifi.removeNetChangedListener(function(ret, err){
  3. alert(JSON.stringify(ret));
  4. });

补充说明

此接口仅支持Android平台

可用性

Android系统

可提供的1.0.0及更高版本