wifiMgr封装了与wifi有关的一系列接口,可实现手机自带的“设置”中连接wifi的功能,并附加了监听wifi开关状态、网络状态变化的接口,支持获取当前连接的wifi信息、扫描附近的wifi列表、获取已配置的wifi密码、连接指定的wifi等功能,开发者调用该插件可实现与wifi有关的功能。由于苹果安全机制,ios暂时不开放获取wifi列表和链接wifi的等功能接口。
插件测试widget下载链接https://community.yonyou.com/thread-123938-1-1.html
获取当前已连接的wifi的信息,由于ios的安全机制,ios只能获取ssid、bssid和ipAddr。对于Android 9.0及以上的版本,要想能够获取ssid(ssid就是wifi名字)必须进行以下2步操作。第一:必须打开手机的gps,目前手机只能手动打开gps,开发者可用代码打开手机设置中gps开关的界面引导用户打开gps,有关打开gps的功能请参考插件store中的gps插件。第二:在YonBuilder移动开发云端控制台应用详情页的"移动打包"界面编译时注意给app设置"位置"权限(在"平台"两个字右边的安卓小机器人图片所在的方框内可以设置 位置权限)。Android9.0及以上除了ssid外的其他信息不需要打开gps就能获取。
在iOS12及以上使用该接口必须按照以下2个步骤才能使用:
1、登录苹果开发者账号后台https://developer.apple.com,找到App IDs选项,在该项下找到Access WiFi Information选项并勾选上,如下图,表示该App需要获取wifi信息。然后重新生成项目的描述文件(Provisioning Profiles),具体操作见官方文档 iOS证书及描述文件制作流程
。
2、配置 entitlement 文件。在widget\res(如果没有res文件夹则要先创建res文件夹)下创建文件名为UZApp.entitlements的文件,该文件需要和widget代码一起进行应用打包,UZApp.entitlements内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.wifi-info</key>
<true/>
</dict>
</plist>
getCurWifiInfo(callback(ret))
ret:
//ios只能获取ssid、bssid和ipAddr。
{
"result": 1,//获取成功状态 0失败 1成功
"data": //获取成功时放回data字段
{
"encrypt": "[WEP][ESS]", // 安全性
"status":"已连接",//连接状态
"rssi": -45, // 信号强度
"linkSpeed": 54,//连接速度
"ipAddr": "192.168.1.87",//IP地址
"bssid": "70:f9:6d:37:c1:72",//Ap MAC
"networkId": 12,//网络ID
"ssid": "AP-GWWG",//wifi名字
"hiddenSSID": false,//是否隐藏wifi名字
"hardAddr": "A0:86:C6:0C:07:4A",//本机MAC
"name": "wlan0/wlan0",//Wifi接口名 Name和DisplayName
"netmask": "255.255.255.192",////网络掩码
"gateway": "192.168.1.126",//网关
"dns1": "202.103.224.68", //DNS1
"dns2": "202.103.225.68" //DNS2
},
"msg":"wifi已关闭" //获取失败时返回msg字段,msg为获取错误的原因
}
var wifi = api.require('wifiMgr');
wifi.getCurWifiInfo(function(ret, err){
alert(JSON.stringify(ret));
});
无
iOS系统,Android系统
可提供的1.0.0及更高版本
获取wifi开关当前状态
getWifiState(callback(ret))
ret:
{
"status":"WIFI_STATE_ENABLED"//字符串类型,wifi的状态 ,取值范围如下:
WIFI_STATE_ENABLED 已开启
WIFI_STATE_ENABLING 正在开启
WIFI_STATE_DISABLED 已关闭
WIFI_STATE_DISABLING 正在关闭
WIFI_STATE_UNKNOWN 未知状态
}
var wifi = api.require('wifiMgr');
wifi.getWifiState(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
打开wifi开关
openWifi(callback(ret))
ret:
{
"result":1 //int类型,是否打开成功 ,取值范围如下:
// 0 打开失败
// 1 打开成功
}
var wifi = api.require('wifiMgr');
wifi.openWifi(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
关闭wifi
closeWifi(callback(ret))
ret:
{
"result":1 //int类型,是否关闭成功 ,取值范围如下:
//0 关闭失败
//1 关闭成功
}
var wifi = api.require('wifiMgr');
wifi.closeWifi(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
打开手机自带“设置”界面
toWifiSettingView(callback(ret))
ret:
{
"result":1 //int类型,是否打开成功 ,取值范围如下:
//0 打开失败
//1 打开成功
}
var wifi = api.require('wifiMgr');
wifi.toWifiSettingView(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
扫描获取附近的wifi列表,开发者可自行定时扫描获取,如间隔1秒扫描一次。
scanWifis(callback(ret))
ret:
{
"result": 1, //int类型,是否扫描成功 ,取值范围如下:
// 0 扫描失败
// 1 扫描成功
"wifiList": [ //扫描到的wifi列表
{
"ssid": "wifiName",//wifi名字
"bssid": "e7:d3:52:f0:80:b0",//Ap MAC
"frequency": 2462,//频率
"level": -44,//信号强度
"capabilities": "[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]"//加密方式
},
...
]
}
var wifi = api.require('wifiMgr');
wifi.scanWifis(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持android平台
Android系统
可提供的1.0.0及更高版本
获取已配置wifi列表。
getConfiguredNetworks(callback(ret))
ret:
{
"result": 1, //int类型,是否获取成功 ,取值范围如下:
//0 获取失败
//1 获取成功
"configuredNetworks": [ //获取到的wifi列表
{
"ssid": "\"MI2\"",//wifi名字,注意此处有双引号
"hiddenSSID": false,//wifi名字是否隐藏
"networkId": 11,//网络id,每个连上的wifi都有一个唯一的networkId
"priority": 3177,//优先级
"status": 2,//状态
"preSharedKey": "*"//wifi密码,此处密码不可见
},
...
]
}
var wifi = api.require('wifiMgr');
wifi.getConfiguredNetworks(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
连接指定的wifi。如果要连接的wifi是已配置过的(已保存有密码且密码正确,getConfiguredNetworks方法可获取),则只需传入ssid,不需传入pwd和capabilities;如果要连接的wifi是没配置过的无密码保护类型的wifi,则只需传入ssid和capabilities,不需传入pwd。
connect({params},callback(ret))
ssid:
pwd:
capabilities:
类型:字符串
描述:密码保护类型;需要与要连接的wifi保护类型一致,如果要连接的wifi是已配置过的(已保存有密码且密码正确),则该参数可不传,反之则要传入该参数(没配置过的无密码保护类型的wifi也要传入该参数)。当要传入该参数时,有两种方法获取该参数:
1.第一种方式:
可从上面的scanWifis方法返回的列表中获取。
2.第二种方式:
直接传入密码保护类型(前提是开发者知道wifi的密码保护类型),传入的密码保护类型要与wifi实际的密码保护类型一致(可通过登录路由器查询),直接传入的取值范围如下:
1、"NOPASS" (无密码);
2、"WEP"(wep保护类型);
3、"WPA" (wpa保护类型) 。
ret:
{
"result": 1, //int类型,是否连接成功 ,取值范围如下:
//0 连接失败,5秒内未连接成功则认为连接失败,
// 开发者也可以自己判断wifi连接是否成功,方法:使用addNetChangedListener,当网络状态发生变化时使用
// 方法getCurWifiInfo获取当前wifi名字判断,若连接不成功,监听到的网络状态为手机流量网络或无网络。
//1 连接成功
}
var wifi = api.require('wifiMgr');
//param = {ssid:"wifi_love",pwd:"2016102828",capabilities:"WEP"};//未连接过的wifi,直接传入capabilities方式。
//param = {ssid:"wifi_love",pwd:"2016102828",capabilities:"[WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]"};//未连接过的wifi,从上面的scanWifis方法返回的列表中获取capabilities。
param = {ssid:"wifi_love"};//已配置过的(已保存有密码且密码正确)
//param = {ssid:"wifi_love",capabilities:"WPA"};//无密码的wifi
wifi.connect(param, function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
断开当前连接的wifi。
disConnect(callback(ret))
ret:
{
"result": 1, //int类型,是否断开成功 ,取值范围如下:
// 0 断开失败
// 1 断开成功
"msg": "" //字符串,断开成功时返回"",断开失败时返回错误提示
}
var wifi = api.require('wifiMgr');
wifi.disConnect(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
清除指定的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))
ssid:
ret:
{
"result": 1, //int类型,是否清除成功 ,取值范围如下:
0 清除失败
1 清除成功
"msg": "" //字符串,清除成功时返回"",清除失败时返回错误提示
}
var wifi = api.require('wifiMgr');
param = {ssid:"wifi_love"};
wifi.removeNetwork(param,function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
禁用指定的wifi网络,要禁用的wifi必须是已配置过的(getConfiguredNetworks方法可获取)。
disableNetwork({params},callback(ret))
ssid:
ret:
{
"result": 1, //int类型,是否禁用成功 ,取值范围如下:
//0 禁用失败
//1 禁用成功
"msg": "" //字符串,禁用成功时返回"",禁用失败时返回错误提示
}
var wifi = api.require('wifiMgr');
param = {ssid:"wifi_love"};
wifi.disableNetwork(param,function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
获取指定wifi的密码,手机需要Root且调用该方法后应用请求获取root权限(弹框方式弹出),用户同意获取root权限后方可获取密码。
getWifiPassword({params},callback(ret))
ssid:
ret:
{
"result": 1, //int类型,是否获取成功 ,取值范围如下:
// 0 获取失败
// 1 获取成功
"pwd": "123456", //result=1时返回,字符串,wifi密码
"msg": "手机未root" //result=0时返回,字符串,获取失败的错误提示
}
var wifi = api.require('wifiMgr');
param = {ssid:"wifi_love"};
wifi.getWifiPassword(param,function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持android平台
Android系统
可提供的1.0.0及更高版本
获取当前网络类型,可用于判断当前手机网络是wifi还是手机流量。
getConnectionType(callback(ret))
ret:
"result": 1, //int类型,是否获取成功 ,取值范围如下:
// 1 获取成功
"type": "CONNECTION_TYPE_WIFI", //字符串 ,取值范围如下:
CONNECTION_TYPE_WIFI//wifi网络
CONNECTION_TYPE_MOBILE//手机流量
CONNECTION_TYPE_NULL//无网络连接
var wifi = api.require('wifiMgr');
wifi.getConnectionType(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
监听wifi开关状态。调用该方法立即返回是否监听成功,即立即回调callback(ret)方法,当wifi开关状态变化时会回调onWifiStateChanged(state)方法,开发者需要自己实现onWifiStateChanged(state)方法。该方法需与removeWifiStateListener方法成对出现,在适当的时候移除监听,即有添加就有移除。
addWifiStateListener(callback(ret))
ret:
"result": 1, //int类型,是否监听成功 ,取值范围如下:
// 1 监听成功
"msg": //字符串,提示信息,取值范围如下:
"添加成功"、"重复添加监听"
var wifi = api.require('wifiMgr');
wifi.addWifiStateListener(function(ret, err){
alert(JSON.stringify(ret));
});
//wifi开关状态变化时的回调方法
function onWifiStateChanged(state){
alert(JSON.stringify(state));
}
###onWifiStateChanged(state)
该方法开发者需自己实现,当wifi开关状态变化时会回调该方法
state:
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
移除wifi开关状态的监听。调用addWifiStateListener方法后,需在适当的时候移除监听,即有添加就有移除。
removeWifiStateListener(callback(ret))
ret:
"result": 1, //int类型,是否移除监听成功 ,取值范围如下:
// 1 移除成功
"msg": "移除成功", //字符串 ,取值范围如下:
"移除成功"、"尚未添加监听"
var wifi = api.require('wifiMgr');
wifi.removeWifiStateListener(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
监听网络状态。调用该方法立即返回是否监听成功,即立即回调callback(ret)方法,当网络状态变化时会回调onNetChanged(state)方法,开发者需要自己实现onNetChanged(state)方法。该方法需与removeNetChangedListener方法成对出现,在适当的时候移除监听,即有添加就有移除。
addNetChangedListener(callback(ret))
ret:
{
"result": 1, //int类型,是否监听成功 ,取值范围如下:
// 1 监听成功
"msg": //字符串,提示信息,取值范围如下:
"添加成功"、"重复添加监听"
}
{
var wifi = api.require('wifiMgr');
wifi.addNetChangedListener(function(ret, err){
alert(JSON.stringify(ret));
});
//网络状态变化时的回调方法
function onNetChanged(state){
alert(JSON.stringify(state));
}
}
###onNetChanged(state)
该方法开发者需自己实现,当网络状态变化时(网络从有到无,或从无到有,或wifi和4g网络之间切换时)会回调该方法。 state:
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本
移除网络状态的监听。调用addNetChangedListener方法后,需在适当的时候移除监听,即有添加就有移除。
removeNetChangedListener(callback(ret))
ret:
{
"result": 1, //int类型,是否移除监听成功 ,取值范围如下:
// 1 移除成功
"msg": "移除成功" //字符串 ,取值范围如下:
"移除成功"、"尚未添加监听"
}
var wifi = api.require('wifiMgr');
wifi.removeNetChangedListener(function(ret, err){
alert(JSON.stringify(ret));
});
此接口仅支持Android平台
Android系统
可提供的1.0.0及更高版本