提交 6afd901e 编写于 作者: lizhongyi_'s avatar lizhongyi_

uni-wifi iOS调整

上级 bfe5f46d
...@@ -3,20 +3,21 @@ import { CaptiveNetwork, kCNNetworkInfoKeySSID, kCNNetworkInfoKeyBSSID } from 'S ...@@ -3,20 +3,21 @@ import { CaptiveNetwork, kCNNetworkInfoKeySSID, kCNNetworkInfoKeyBSSID } from 'S
import { NSArray, NSDictionary } from 'Foundation'; import { NSArray, NSDictionary } from 'Foundation';
import { CFString } from 'CoreFoundation'; import { CFString } from 'CoreFoundation';
import { UIDevice } from 'UIKit'; import { UIDevice } from 'UIKit';
import { WifiOption, WifiConnectOption, GetConnectedWifiOptions, UniWifiInfo, UniWifiResult, UniWifiCallback, StartWifi, StopWifi, GetWifiList, OnGetWifiList, OffGetWifiList, GetConnectedWifi, ConnectWifi, OnWifiConnected, OnWifiConnectedWithPartialInfo, OffWifiConnected, OnOffWifiConnectedWithPartialInfo, SetWifiList } from "../interface.uts" import { UniWifiResultCallbackWithPartialInfo, UniGetWifiListCallback, UniWifiResultCallback, WifiOption, WifiConnectOption, GetConnectedWifiOptions, UniWifiInfo, UniWifiResult, UniWifiCallback, StartWifi, StopWifi, GetWifiList, OnGetWifiList, OffGetWifiList, GetConnectedWifi, ConnectWifi, OnWifiConnected, OnWifiConnectedWithPartialInfo, OffWifiConnected, OffWifiConnectedWithPartialInfo, SetWifiList } from "../interface.uts"
import { WifiFailImpl, getErrcode } from '../unierror';
/* /*
* 系统定位权限获取类 * 系统定位权限获取类
*/ */
class LocationPromiseService implements CLLocationManagerDelegate { class LocationPromiseService implements CLLocationManagerDelegate {
static promiseCompletionHandler: ((res: boolean)=>void)[] = [] static promiseCompletionHandler: ((res: boolean)=>void)[] = []
manager?: CLLocationManager manager?: CLLocationManager
constructor(manager?: CLLocationManager) { constructor(manager?: CLLocationManager) {
this.manager = manager this.manager = manager
} }
initlizeManager(): boolean { initlizeManager(): boolean {
if (this.manager == null) { if (this.manager == null) {
this.manager = new CLLocationManager() this.manager = new CLLocationManager()
...@@ -24,20 +25,20 @@ class LocationPromiseService implements CLLocationManagerDelegate { ...@@ -24,20 +25,20 @@ class LocationPromiseService implements CLLocationManagerDelegate {
} }
return true return true
} }
locationManager(manager: CLLocationManager, @argumentLabel("didChangeAuthorization") status: CLAuthorizationStatus) { locationManager(manager: CLLocationManager, @argumentLabel("didChangeAuthorization") status: CLAuthorizationStatus) {
if (status == CLAuthorizationStatus.authorizedAlways || status == CLAuthorizationStatus.authorizedWhenInUse) { if (status == CLAuthorizationStatus.authorizedAlways || status == CLAuthorizationStatus.authorizedWhenInUse) {
LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { LocationPromiseService.promiseCompletionHandler.forEach((handler): void => {
handler(true) handler(true)
}) })
} else if (status == CLAuthorizationStatus.notDetermined) { } else if (status == CLAuthorizationStatus.notDetermined) {
manager.requestWhenInUseAuthorization() manager.requestWhenInUseAuthorization()
} else if (status == CLAuthorizationStatus.denied) { } else if (status == CLAuthorizationStatus.denied) {
LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { LocationPromiseService.promiseCompletionHandler.forEach((handler): void => {
handler(false) handler(false)
}) })
} }
} }
requestPromise(@escaping completion: (res: boolean)=>void) { requestPromise(@escaping completion: (res: boolean)=>void) {
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus() let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
if (status == CLAuthorizationStatus.notDetermined) { if (status == CLAuthorizationStatus.notDetermined) {
...@@ -52,20 +53,20 @@ class LocationPromiseService implements CLLocationManagerDelegate { ...@@ -52,20 +53,20 @@ class LocationPromiseService implements CLLocationManagerDelegate {
this.manager!.requestWhenInUseAuthorization() this.manager!.requestWhenInUseAuthorization()
LocationPromiseService.promiseCompletionHandler.push(completion) LocationPromiseService.promiseCompletionHandler.push(completion)
} }
} }
} }
} }
const locationPromiseService: LocationPromiseService = new LocationPromiseService(null) const locationPromiseService: LocationPromiseService = new LocationPromiseService(null)
/* /*
* 获取系统定位权限 * 获取系统定位权限
*/ */
function requestLocationPromise(@escaping completion: (res: boolean)=>void) { function requestLocationPromise(@escaping completion: (res: boolean)=>void) {
locationPromiseService.requestPromise(completion) locationPromiseService.requestPromise(completion)
} }
/* /*
* 获取当前连接的wifi信息(通过定位权限) * 获取当前连接的wifi信息(通过定位权限)
*/ */
function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) { function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) {
...@@ -76,20 +77,20 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) ...@@ -76,20 +77,20 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions)
secure: false, secure: false,
signalStrength: 0, signalStrength: 0,
frequency: 0 frequency: 0
} }
if (arr != null) { if (arr != null) {
let list = arr! as NSArray let list = arr! as NSArray
let index: Int = 0 let index: Int = 0
while (index < list.count) { while (index < list.count) {
let item = list[index] let item = list[index]
let interfaceName = item as string let interfaceName = item as string
let dic = CNCopyCurrentNetworkInfo(interfaceName as CFString) let dic = CNCopyCurrentNetworkInfo(interfaceName as CFString)
if (dic != null) { if (dic != null) {
let dict = dic! as NSDictionary let dict = dic! as NSDictionary
let SSID = dict[kCNNetworkInfoKeySSID as string] let SSID = dict[kCNNetworkInfoKeySSID as string]
let BSSID = dict[kCNNetworkInfoKeyBSSID as string] let BSSID = dict[kCNNetworkInfoKeyBSSID as string]
if (SSID != null && BSSID != null) { if (SSID != null && BSSID != null) {
let ssid = SSID! as string let ssid = SSID! as string
let bssid = BSSID! as string let bssid = BSSID! as string
...@@ -103,7 +104,7 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) ...@@ -103,7 +104,7 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions)
} }
index++ index++
} }
if (wifiInfo.BSSID!.length > 0 && wifiInfo.SSID.length > 0) { if (wifiInfo.BSSID!.length > 0 && wifiInfo.SSID.length > 0) {
let res: UniWifiResult = { let res: UniWifiResult = {
errSubject: "uni-getConnectedWifi", errSubject: "uni-getConnectedWifi",
...@@ -114,12 +115,12 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) ...@@ -114,12 +115,12 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions)
option.success?.(res) option.success?.(res)
option.complete?.(res) option.complete?.(res)
}else { }else {
let err = new UniError("uni-getConnectedWifi",12010,"getConnectedWifi:system internal error"); let err = new WifiFailImpl(getErrcode(12010));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
}else { }else {
let err = new UniError("uni-getConnectedWifi",12010,"getConnectedWifi:system internal error"); let err = new WifiFailImpl(getErrcode(12010));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
...@@ -127,7 +128,7 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) ...@@ -127,7 +128,7 @@ function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions)
/* /*
* 保存全局数据信息 * 保存全局数据信息
*/ */
class UniWiFiModuleGloabInfo { class UniWiFiModuleGloabInfo {
...@@ -138,14 +139,14 @@ class UniWiFiModuleGloabInfo { ...@@ -138,14 +139,14 @@ class UniWiFiModuleGloabInfo {
/* /*
* 初始化wifi模块 * 初始化wifi模块
*/ */
export const startWifi: StartWifi = function (option: WifiOption) { export const startWifi: StartWifi = function (option: WifiOption) {
UniWiFiModuleGloabInfo.alreadyStartWifi = true UniWiFiModuleGloabInfo.alreadyStartWifi = true
let res: UniWifiResult = { let res: UniWifiResult = {
errSubject: "uni-startWifi", errSubject: "uni-startWifi",
errCode: 0, errCode: 0,
errMsg: "startWifi:ok", errMsg: "startWifi:ok",
wifi: null wifi: null
} }
...@@ -153,15 +154,15 @@ export const startWifi: StartWifi = function (option: WifiOption) { ...@@ -153,15 +154,15 @@ export const startWifi: StartWifi = function (option: WifiOption) {
option.complete?.(res) option.complete?.(res)
} }
/* /*
* 停止wifi模块 * 停止wifi模块
*/ */
export const stopWifi: StopWifi = function (option: WifiOption) { export const stopWifi: StopWifi = function (option: WifiOption) {
UniWiFiModuleGloabInfo.alreadyStartWifi = false UniWiFiModuleGloabInfo.alreadyStartWifi = false
LocationPromiseService.promiseCompletionHandler = [] LocationPromiseService.promiseCompletionHandler = []
let res: UniWifiResult = { let res: UniWifiResult = {
errSubject: "uni-stopWifi", errSubject: "uni-stopWifi",
errCode: 0, errCode: 0,
errMsg: "stopWifi:ok", errMsg: "stopWifi:ok",
wifi: null wifi: null
} }
...@@ -169,11 +170,11 @@ export const stopWifi: StopWifi = function (option: WifiOption) { ...@@ -169,11 +170,11 @@ export const stopWifi: StopWifi = function (option: WifiOption) {
option.complete?.(res) option.complete?.(res)
} }
/* /*
* 获取wifi列表, 在调用之前需要引导用户跳转到系统设置-WIFI设置页面,系统搜索周边wifi后app才能接收到回调 * 获取wifi列表, 在调用之前需要引导用户跳转到系统设置-WIFI设置页面,系统搜索周边wifi后app才能接收到回调
*/ */
export const getWifiList: GetWifiList = function (option: WifiOption) { export const getWifiList: GetWifiList = function (option: WifiOption) {
let err = new UniError("uni-getWifiList",12001,"getWifiList:system not support"); let err = new WifiFailImpl(getErrcode(12001));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
...@@ -181,11 +182,11 @@ export const getWifiList: GetWifiList = function (option: WifiOption) { ...@@ -181,11 +182,11 @@ export const getWifiList: GetWifiList = function (option: WifiOption) {
/* 获取wifi列表的回调 /* 获取wifi列表的回调
* note: 请在getWifiList方法的回调里调用该方法 * note: 请在getWifiList方法的回调里调用该方法
*/ */
export const onGetWifiList: OnGetWifiList = function (callback: UniWifiCallback) { export const onGetWifiList: OnGetWifiList = function (callback: UniGetWifiListCallback) {
} }
/* /*
* 注销获取wifi列表的回调 * 注销获取wifi列表的回调
*/ */
export const offGetWifiList: OffGetWifiList = function (callback: UniWifiCallback) { export const offGetWifiList: OffGetWifiList = function (callback: UniWifiCallback) {
...@@ -193,12 +194,12 @@ export const offGetWifiList: OffGetWifiList = function (callback: UniWifiCallbac ...@@ -193,12 +194,12 @@ export const offGetWifiList: OffGetWifiList = function (callback: UniWifiCallbac
} }
/* /*
* 获取当前连接的wifi信息 * 获取当前连接的wifi信息
*/ */
export const getConnectedWifi: GetConnectedWifi = function (option: GetConnectedWifiOptions) { export const getConnectedWifi: GetConnectedWifi = function (option: GetConnectedWifiOptions) {
if (UniWiFiModuleGloabInfo.alreadyStartWifi == false) { if (UniWiFiModuleGloabInfo.alreadyStartWifi == false) {
let err = new UniError("uni-getConnectedWifi",12000,"getConnectedWifi:not init"); let err = new WifiFailImpl(getErrcode(12000));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} else{ } else{
...@@ -207,7 +208,7 @@ export const getConnectedWifi: GetConnectedWifi = function (option: GetConnected ...@@ -207,7 +208,7 @@ export const getConnectedWifi: GetConnectedWifi = function (option: GetConnected
if (success == true) { if (success == true) {
fetchConnectedWifiWithLocationPromise(option) fetchConnectedWifiWithLocationPromise(option)
}else { }else {
let err = new UniError("uni-getConnectedWifi",12007,"getConnectedWifi:user denied"); let err = new WifiFailImpl(getErrcode(12007));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
...@@ -218,50 +219,50 @@ export const getConnectedWifi: GetConnectedWifi = function (option: GetConnected ...@@ -218,50 +219,50 @@ export const getConnectedWifi: GetConnectedWifi = function (option: GetConnected
} }
} }
/* /*
* 连接wifi * 连接wifi
*/ */
export const connectWifi: ConnectWifi = function (option: WifiConnectOption) { export const connectWifi: ConnectWifi = function (option: WifiConnectOption) {
let err = new UniError("uni-connectWifi",12001,"connectWifi:system not support"); let err = new WifiFailImpl(getErrcode(12001));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
/* /*
* 连上wifi事件的监听函数 * 连上wifi事件的监听函数
*/ */
export const onWifiConnected: OnWifiConnected = function (callback: UniWifiCallback) { export const onWifiConnected: OnWifiConnected = function (callback: UniWifiResultCallback) {
} }
/* /*
* 连上wifi事件的监听函数, wifiInfo仅包含ssid * 连上wifi事件的监听函数, wifiInfo仅包含ssid
*/ */
export const onWifiConnectedWithPartialInfo: OnWifiConnectedWithPartialInfo = function (callback: UniWifiCallback) { export const onWifiConnectedWithPartialInfo: OnWifiConnectedWithPartialInfo = function (callback: UniWifiResultCallbackWithPartialInfo) {
} }
/* /*
* 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。 * 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。
*/ */
export const offWifiConnected: OffWifiConnected = function (callback: UniWifiCallback | null) { export const offWifiConnected: OffWifiConnected = function (callback: UniWifiCallback | null) {
} }
/* /*
* 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。 * 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。
*/ */
export const onOffWifiConnectedWithPartialInfo: OnOffWifiConnectedWithPartialInfo = function (callback: UniWifiCallback | null) { export const offWifiConnectedWithPartialInfo: OffWifiConnectedWithPartialInfo = function (callback: UniWifiResultCallbackWithPartialInfo | null) {
} }
/* /*
* 设置 wifiList 中 AP 的相关信息。在 onGetWifiList 回调后调用,iOS特有接口。 * 设置 wifiList 中 AP 的相关信息。在 onGetWifiList 回调后调用,iOS特有接口。
*/ */
export const setWifiList: SetWifiList = function (option: WifiOption) { export const setWifiList: SetWifiList = function (option: WifiOption) {
let err = new UniError("uni-setWifiList",12001,"setWifiList:system not support"); let err = new WifiFailImpl(getErrcode(12001));
option.fail?.(err) option.fail?.(err)
option.complete?.(err) option.complete?.(err)
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ declare namespace UniNamespace { ...@@ -6,6 +6,7 @@ declare namespace UniNamespace {
type WifiCompleteCallback = (res : UniWifiComplete) => void type WifiCompleteCallback = (res : UniWifiComplete) => void
type UniWifiCallback = () => void type UniWifiCallback = () => void
type WifiErrorCode = 1300002 type WifiErrorCode = 1300002
interface UniWifiInfo { interface UniWifiInfo {
...@@ -27,31 +28,41 @@ declare namespace UniNamespace { ...@@ -27,31 +28,41 @@ declare namespace UniNamespace {
errCode : WifiErrorCode errCode : WifiErrorCode
} }
interface WifiConnectOption{ interface WifiConnectOption {
SSID : string | null; SSID : string | null;
BSSID : string | null; BSSID : string | null;
password : string | null; password : string | null;
maunal : boolean | null; maunal : boolean | null;
partialInfo : boolean | null; //ios不生效 partialInfo : boolean | null; //ios不生效
success ?: WifiSuccessCallback | null; success : WifiSuccessCallback | null;
fail ?: WifiFailCallback | null; fail : WifiFailCallback | null;
complete ?: WifiCompleteCallback | null; complete : WifiCompleteCallback | null;
} }
interface GetConnectedWifiOptions { interface GetConnectedWifiOptions {
partialInfo : boolean | null; partialInfo : boolean | null;
success ?: WifiSuccessCallback | null; success : WifiSuccessCallback | null;
fail ?: WifiFailCallback | null; fail : WifiFailCallback | null;
complete ?: WifiCompleteCallback | null; complete ?: WifiCompleteCallback | null;
} }
interface WifiOption { interface WifiOption {
success ?: WifiSuccessCallback | null, success : WifiSuccessCallback | null,
fail ?: WifiFailCallback | null, fail : WifiFailCallback | null,
complete ?: InstallApkCompleteCallback | null complete : InstallApkCompleteCallback | null
}
interface UniWifiInfoWithPartialInfo {
SSID : string;
} }
type UniGetWifiListCallback = (wifiInfo:UTSJSONObject) => void
type UniWifiResultCallback = (wifiInfo:UniWifiResult) => void
type UniWifiResultCallbackWithPartialInfo = (wifiInfo:UniWifiInfoWithPartialInfo) => void
} }
declare interface Uni { declare interface Uni {
...@@ -207,7 +218,7 @@ declare interface Uni { ...@@ -207,7 +218,7 @@ declare interface Uni {
] ]
} }
*/ */
onGetWifiList(callback : UniNamespace.UniWifiCallback) : void, onGetWifiList(callback : UniNamespace.UniGetWifiListCallback) : void,
/** /**
* 移除获取到 Wi-Fi 列表数据事件的监听函数。 * 移除获取到 Wi-Fi 列表数据事件的监听函数。
* *
...@@ -279,7 +290,7 @@ declare interface Uni { ...@@ -279,7 +290,7 @@ declare interface Uni {
* @uniVueVersion 2,3 //支持的vue版本 * @uniVueVersion 2,3 //支持的vue版本
* @autotest { expectCallback: true } * @autotest { expectCallback: true }
*/ */
onWifiConnected(callback : UniNamespace.UniWifiCallback) : void, onWifiConnected(callback : UniNamespace.UniWifiResultCallback) : void,
/** /**
* 监听连接上 Wi-Fi 的事件。 * 监听连接上 Wi-Fi 的事件。
* *
...@@ -303,7 +314,7 @@ declare interface Uni { ...@@ -303,7 +314,7 @@ declare interface Uni {
* @uniVueVersion 2,3 //支持的vue版本 * @uniVueVersion 2,3 //支持的vue版本
* @autotest { expectCallback: true } * @autotest { expectCallback: true }
*/ */
onWifiConnectedWithPartialInfo(callback : UniNamespace.UniWifiCallback) : void, onWifiConnectedWithPartialInfo(callback : UniNamespace.UniWifiResultCallbackWithPartialInfo) : void,
/** /**
* 移除连接上 Wi-Fi 的事件的监听函数。 * 移除连接上 Wi-Fi 的事件的监听函数。
* *
...@@ -333,7 +344,7 @@ declare interface Uni { ...@@ -333,7 +344,7 @@ declare interface Uni {
* 移除连接上 Wi-Fi 的事件的监听函数。 * 移除连接上 Wi-Fi 的事件的监听函数。
* *
* @param {UniWifiCallback} callback * @param {UniWifiCallback} callback
* @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onOffWifiConnectedWithPartialInfo * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo
* @uniPlatform { * @uniPlatform {
* "app": { * "app": {
* "android": { * "android": {
...@@ -352,7 +363,7 @@ declare interface Uni { ...@@ -352,7 +363,7 @@ declare interface Uni {
* @uniVueVersion 2,3 //支持的vue版本 * @uniVueVersion 2,3 //支持的vue版本
* @autotest { expectCallback: true } * @autotest { expectCallback: true }
*/ */
onOffWifiConnectedWithPartialInfo(callback ?: UniNamespace.UniWifiCallback) : void, offWifiConnectedWithPartialInfo(callback ?: UniNamespace.UniWifiResultCallbackWithPartialInfo) : void,
/** /**
* SetWifiList 暂未实现 * SetWifiList 暂未实现
* *
......
...@@ -83,7 +83,7 @@ export type OnWifiConnectedWithPartialInfo = (callback : UniWifiResultCallbackWi ...@@ -83,7 +83,7 @@ export type OnWifiConnectedWithPartialInfo = (callback : UniWifiResultCallbackWi
export type OffWifiConnected = (callback : UniWifiCallback | null) => void export type OffWifiConnected = (callback : UniWifiCallback | null) => void
export type OnOffWifiConnectedWithPartialInfo = (callback : UniWifiCallback | null) => void export type OffWifiConnectedWithPartialInfo = (callback : UniWifiResultCallbackWithPartialInfo | null) => void
export type SetWifiList = (option : WifiOption) => void export type SetWifiList = (option : WifiOption) => void
...@@ -382,7 +382,7 @@ interface Uni { ...@@ -382,7 +382,7 @@ interface Uni {
* 移除连接上 Wi-Fi 的事件的监听函数。 * 移除连接上 Wi-Fi 的事件的监听函数。
* *
* @param {UniWifiCallback} callback * @param {UniWifiCallback} callback
* @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onOffWifiConnectedWithPartialInfo * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo
* @uniPlatform { * @uniPlatform {
* "app": { * "app": {
* "android": { * "android": {
...@@ -401,7 +401,7 @@ interface Uni { ...@@ -401,7 +401,7 @@ interface Uni {
* @uniVueVersion 2,3 //支持的vue版本 * @uniVueVersion 2,3 //支持的vue版本
* @autotest { expectCallback: true } * @autotest { expectCallback: true }
*/ */
onOffWifiConnectedWithPartialInfo(callback : UniWifiCallback | null) : void, offWifiConnectedWithPartialInfo(callback : UniWifiResultCallbackWithPartialInfo | null) : void,
/** /**
* SetWifiList 暂未实现 * SetWifiList 暂未实现
* *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册