index.uts 12.5 KB
Newer Older
1
import Context from "android.content.Context";
杜庆泉's avatar
杜庆泉 已提交
2
import { getAppContext, getUniActivity } from "io.dcloud.uts.android";
3
import WifiManager from "android.net.wifi.WifiManager";
杜庆泉's avatar
杜庆泉 已提交
4
import WifiInfo from "android.net.wifi.WifiInfo";
杜庆泉's avatar
杜庆泉 已提交
5 6 7 8 9 10 11 12 13
import Manifest from "android.Manifest";
import PackageManager from "android.content.pm.PackageManager";
import ScanResult from "android.net.wifi.ScanResult";
import BroadcastReceiver from "android.content.BroadcastReceiver";
import ActivityCompat from "androidx.core.app.ActivityCompat";
import IntentFilter from "android.content.IntentFilter";
import Gson from "com.google.gson.Gson";
import JSONObject from "com.alibaba.fastjson.JSONObject";
import Intent from "android.content.Intent";
杜庆泉's avatar
杜庆泉 已提交
14
import Thread from "java.lang.Thread";
杜庆泉's avatar
杜庆泉 已提交
15
import WifiConfiguration from 'android.net.wifi.WifiConfiguration';
16

杜庆泉's avatar
杜庆泉 已提交
17 18 19 20 21 22 23 24 25
/**
 * Wifi 函数通用入参封装
 */
type WifiOption = {
	success?: (res: object) => void;
	fail?: (res: object) => void;
	complete?: (res: object) => void;
};

杜庆泉's avatar
杜庆泉 已提交
26 27 28 29 30 31 32 33 34 35 36 37
/**
 * Wifi 链接参数封装
 */
type WifiConnectOption = {
	SSID:string;
	BSSID:string;
	password:string;
	maunal:boolean;
	partialInfo:boolean;
	success?: (res: object) => void;
	fail?: (res: object) => void;
	complete?: (res: object) => void;
杜庆泉's avatar
杜庆泉 已提交
38 39 40 41
	
	
	
	
杜庆泉's avatar
杜庆泉 已提交
42
}
杜庆泉's avatar
杜庆泉 已提交
43

杜庆泉's avatar
杜庆泉 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57

function wrapWifiConfiguration(SSID:string ,password:string):WifiConfiguration {
		
	let config = new WifiConfiguration();
	
	config.allowedAuthAlgorithms.clear();
	config.allowedGroupCiphers.clear();
	config.allowedKeyManagement.clear();
	config.allowedPairwiseCiphers.clear();
	config.allowedProtocols.clear();
	config.SSID = "\"" + SSID + "\"";
	
	return config;
}
杜庆泉's avatar
杜庆泉 已提交
58 59 60 61
/**
 * Wifi信息统一数据结构
 */
class UniWifiInfo {
杜庆泉's avatar
杜庆泉 已提交
62 63 64 65 66 67

	SSID: String = "";
	BSSID: String = "";
	secure: boolean = false;
	signalStrength: Number = 0;
	frequency: Number = 0;
杜庆泉's avatar
杜庆泉 已提交
68 69 70
	
	/*下面的字段属于扩展字段*/
	securityType:string = ""
杜庆泉's avatar
杜庆泉 已提交
71 72 73

	constructor(scanResult?: ScanResult) {
		if (scanResult != null) {
杜庆泉's avatar
杜庆泉 已提交
74 75 76
			// 如果是通过扫描列表得到的数据,进行封装
			this.BSSID = scanResult.BSSID;
			this.SSID = scanResult.SSID;
杜庆泉's avatar
杜庆泉 已提交
77

杜庆泉's avatar
杜庆泉 已提交
78 79
			this.signalStrength = scanResult.level;
			this.frequency = scanResult.frequency;
杜庆泉's avatar
杜庆泉 已提交
80

杜庆泉's avatar
杜庆泉 已提交
81 82 83
			// 是否安全,微信的标准是是否需要密码。 来源:https://developers.weixin.qq.com/community/develop/doc/00064cf1790458db19cddf9925ac00?highLine=WifiInfo
			this.secure = false;
			let capabilities = scanResult.capabilities.trim();
打打卡夫卡's avatar
打打卡夫卡 已提交
84
			if ((capabilities.equals(Global.WIFI_AUTH_OPEN) || capabilities.equals(Global.WIFI_AUTH_ROAM))) {
杜庆泉's avatar
杜庆泉 已提交
85
				this.secure = false;
杜庆泉's avatar
杜庆泉 已提交
86
			} else {
杜庆泉's avatar
杜庆泉 已提交
87 88
				this.secure = true;
			}
杜庆泉's avatar
杜庆泉 已提交
89 90 91
			
			/*扩展字段*/
			this.securityType = getSecurityType(scanResult);
杜庆泉's avatar
杜庆泉 已提交
92 93
		}
	}
杜庆泉's avatar
杜庆泉 已提交
94

杜庆泉's avatar
杜庆泉 已提交
95 96 97
	/**
	 * 根据connectInfo 链接信息对wifi数据结构进行初始化
	 */
杜庆泉's avatar
杜庆泉 已提交
98
	wrapConnectInfo(connectInfo: WifiInfo): void {
杜庆泉's avatar
杜庆泉 已提交
99 100
		console.log(connectInfo.getSSID());
		console.log(connectInfo.getBSSID());
杜庆泉's avatar
杜庆泉 已提交
101 102
		if (connectInfo.getBSSID() == null) {
			return
杜庆泉's avatar
杜庆泉 已提交
103
		}
打打卡夫卡's avatar
打打卡夫卡 已提交
104 105 106 107 108
		if (connectInfo.getSSID() != null) {
			let s = connectInfo.getSSID();
			// 微信不带,这里需要去掉引号
			if (s.length > 2 && s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') {
				s = s.substring(1, s.length - 1);
杜庆泉's avatar
杜庆泉 已提交
109
			}
打打卡夫卡's avatar
打打卡夫卡 已提交
110 111
			this.SSID = s;
		}
杜庆泉's avatar
杜庆泉 已提交
112

打打卡夫卡's avatar
打打卡夫卡 已提交
113 114 115 116
		this.BSSID = connectInfo.getBSSID();
		//Android返回的值是-100~0,而微信API规范是0~100,值越大信号越好,需要+100拉齐
		this.signalStrength = connectInfo.getRssi() + 100; 
		this.frequency = connectInfo.getFrequency();
杜庆泉's avatar
杜庆泉 已提交
117

杜庆泉's avatar
杜庆泉 已提交
118
	}
杜庆泉's avatar
杜庆泉 已提交
119 120


杜庆泉's avatar
杜庆泉 已提交
121 122 123 124 125
}

/**
 * 获取当前链接的wifi信息
 */
126
type GetConnectedWifiOptions = {
杜庆泉's avatar
杜庆泉 已提交
127 128 129 130
	partialInfo?: boolean
	success?: (res: UTSJSONObject) => void
	fail?: (res: UTSJSONObject) => void
	complete?: (res: UTSJSONObject) => void
131 132
}

杜庆泉's avatar
杜庆泉 已提交
133 134 135 136 137


/**
 * 全局数据储存
 */
杜庆泉's avatar
杜庆泉 已提交
138 139 140 141 142 143 144
class Global {
	static mReceiver?: CustomBroadcastReceiver = null;
	static scanList: UniWifiInfo[] = []
	static WIFI_AUTH_OPEN: String = "";
	static WIFI_AUTH_ROAM: String = "[ESS]";
	static getWifiListCallbackList: UTSCallback[] = []
	static onWifiConnectCallbackList: UTSCallback[] = []
杜庆泉's avatar
杜庆泉 已提交
145 146 147
}


杜庆泉's avatar
杜庆泉 已提交
148 149 150 151 152 153 154 155 156 157 158 159
function getSecurityType(result:ScanResult):string {
    if (result.capabilities.contains("WEP")) {
        return "WEP";
    } else if (result.capabilities.contains("PSK")) {
        return "WPA";
    } else if (result.capabilities.contains("EAP")) {
        return "EAP";
    }
    return "NONE";
}


杜庆泉's avatar
杜庆泉 已提交
160 161 162
/**
 * 自定义wifi变化广播监听器
 */
杜庆泉's avatar
杜庆泉 已提交
163
class CustomBroadcastReceiver extends BroadcastReceiver {
杜庆泉's avatar
杜庆泉 已提交
164

杜庆泉's avatar
杜庆泉 已提交
165 166 167
	mWifiManager?: WifiManager = null;

	constructor(wifiManager: WifiManager) {
杜庆泉's avatar
杜庆泉 已提交
168 169 170
		super();
		this.mWifiManager = wifiManager;
	}
杜庆泉's avatar
杜庆泉 已提交
171 172 173 174

	override onReceive(_context: Context, intent: Intent): void {


杜庆泉's avatar
杜庆泉 已提交
175 176 177 178 179 180
		if (intent.action == WifiManager.WIFI_STATE_CHANGED_ACTION) {
			let state =
				intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)
			if (state == WifiManager.WIFI_STATE_ENABLED) {
				// 获取当前的connectInfo 并且进行数据封装
				let uniWifiInfo = new UniWifiInfo(null)
杜庆泉's avatar
杜庆泉 已提交
181 182 183 184
				//做一些异步操作
				setTimeout(function() {
					// BroadcastReceiver 中不能执行耗时任务,需要使用setTimeout
					console.log(Thread.currentThread().getName())
打打卡夫卡's avatar
打打卡夫卡 已提交
185
					// @ts-ignore
杜庆泉's avatar
杜庆泉 已提交
186 187 188
					let winfo = this.mWifiManager!.getConnectionInfo();
					while (winfo.bssid == null) {
						Thread.sleep(1000)
打打卡夫卡's avatar
打打卡夫卡 已提交
189
						winfo = this.mWifiManager!.getConnectionInfo();
杜庆泉's avatar
杜庆泉 已提交
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
					}

					// 封装成数据对象
					uniWifiInfo.wrapConnectInfo(winfo)
					let res = {
						errMsg: 'onWifiConnected:ok',
						errCode: 0,
						wifi: uniWifiInfo
					}
					// wifi状态可用了,分发当前的链接状态给已注册的监听集合
					for (let perCallback in Global.onWifiConnectCallbackList) {
						perCallback(res);
					}

				}, 100);
			}

杜庆泉's avatar
杜庆泉 已提交
207
		}
杜庆泉's avatar
杜庆泉 已提交
208 209


杜庆泉's avatar
杜庆泉 已提交
210
		if (intent.action == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) {
杜庆泉's avatar
杜庆泉 已提交
211 212
			// wifi 扫描结果回调
			let results = this.mWifiManager!.scanResults;
杜庆泉's avatar
杜庆泉 已提交
213

杜庆泉's avatar
杜庆泉 已提交
214 215
			if (results != null) {
				Global.scanList = []
杜庆泉's avatar
杜庆泉 已提交
216 217 218
				for (let scanResult in results) {
					if (scanResult.SSID == null) {
						continue;
杜庆泉's avatar
杜庆泉 已提交
219
					}
杜庆泉's avatar
杜庆泉 已提交
220
					Global.scanList.push(new UniWifiInfo(scanResult));
杜庆泉's avatar
杜庆泉 已提交
221
				}
杜庆泉's avatar
杜庆泉 已提交
222

杜庆泉's avatar
杜庆泉 已提交
223
				// 挨个通知,所有的监听器
杜庆泉's avatar
杜庆泉 已提交
224 225
				for (let perCallback in Global.getWifiListCallbackList) {

杜庆泉's avatar
杜庆泉 已提交
226 227 228 229 230
					const data = new JSONObject();
					let mainJsonStr = Gson().toJson(Global.scanList);
					data["wifiList"] = mainJsonStr
					perCallback(data);
				}
杜庆泉's avatar
杜庆泉 已提交
231

杜庆泉's avatar
杜庆泉 已提交
232
			}
杜庆泉's avatar
杜庆泉 已提交
233

杜庆泉's avatar
杜庆泉 已提交
234 235
		}
	}
杜庆泉's avatar
杜庆泉 已提交
236

杜庆泉's avatar
杜庆泉 已提交
237 238
}

239 240


杜庆泉's avatar
杜庆泉 已提交
241 242 243 244 245
/************************* 下面是对外提供的函数 *************************/

/**
 * 获取wifi列表
 */
杜庆泉's avatar
杜庆泉 已提交
246
export function getWifiList(option: WifiOption) {
247 248 249 250 251
	
	if (Global.mReceiver == null) {
		// 还没调用startWifi 提示报错
		var result = {
			errCode: 12000,
杜庆泉's avatar
杜庆泉 已提交
252
			errMsg: "getWifiList:fail:not invoke startWifi",
杜庆泉's avatar
杜庆泉 已提交
253
			errSubject:"uni-getWifiList"
254 255 256 257 258 259 260
		}
		option.fail?.(result)
		option.complete?.(result)
	
		return
	}
	
杜庆泉's avatar
杜庆泉 已提交
261
	let wifiManager: WifiManager =
杜庆泉's avatar
杜庆泉 已提交
262 263 264
		getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager
	wifiManager.startScan()

杜庆泉's avatar
杜庆泉 已提交
265
	let ret = {
杜庆泉's avatar
杜庆泉 已提交
266 267
		errCode: 0,
		errMsg: "getWifiList:ok"
杜庆泉's avatar
杜庆泉 已提交
268
	}
打打卡夫卡's avatar
打打卡夫卡 已提交
269 270
	option.success?.(ret)
	option.complete?.(ret)
杜庆泉's avatar
杜庆泉 已提交
271

杜庆泉's avatar
杜庆泉 已提交
272 273 274
}


杜庆泉's avatar
杜庆泉 已提交
275

杜庆泉's avatar
杜庆泉 已提交
276 277 278
/**
 * wifi 链接成功的回调注册
 */
杜庆泉's avatar
杜庆泉 已提交
279
export function onWifiConnected(callback: UTSCallback) {
杜庆泉's avatar
杜庆泉 已提交
280 281 282 283 284 285
	Global.onWifiConnectCallbackList.push(callback)
}

/**
 * wifi 链接成功的回调取消注册
 */
杜庆泉's avatar
杜庆泉 已提交
286
export function offWifiConnected(callback: UTSCallback) {
杜庆泉's avatar
杜庆泉 已提交
287
	let callbackIndex = Global.onWifiConnectCallbackList.indexOf(callback)
杜庆泉's avatar
杜庆泉 已提交
288 289
	if (callbackIndex > 0) {
		Global.onWifiConnectCallbackList.splice(callbackIndex, 1);
杜庆泉's avatar
杜庆泉 已提交
290 291 292
	}
}

杜庆泉's avatar
杜庆泉 已提交
293 294 295
/**
 * 注册Wifi列表的监听事件
 */
杜庆泉's avatar
杜庆泉 已提交
296
export function onGetWifiList(callback: UTSCallback) {
杜庆泉's avatar
杜庆泉 已提交
297 298 299 300 301
	Global.getWifiListCallbackList.push(callback)
}
/**
 * 取消注册Wifi列表的监听事件
 */
杜庆泉's avatar
杜庆泉 已提交
302
export function offGetWifiList(callback: UTSCallback) {
杜庆泉's avatar
杜庆泉 已提交
303
	let callbackIndex = Global.getWifiListCallbackList.indexOf(callback)
杜庆泉's avatar
杜庆泉 已提交
304 305
	if (callbackIndex > 0) {
		Global.getWifiListCallbackList.splice(callbackIndex, 1);
杜庆泉's avatar
杜庆泉 已提交
306 307 308
	}
}

杜庆泉's avatar
杜庆泉 已提交
309 310 311 312 313 314 315 316 317 318 319 320

/**
 * 链接指定wifi
 */
export function connectWifi(option: WifiConnectOption) {
	
	
	
	var result = {
		errCode: 12000,
		errMsg: "connectWifi:fail:not invoke startWifi",
		errSubject:"uni-connectWifi"
杜庆泉's avatar
杜庆泉 已提交
321 322
	}
	
杜庆泉's avatar
杜庆泉 已提交
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
	if (Global.mReceiver == null || Global.scanList.length < 1) {
		// 还没调用startWifi 提示报错
		option.fail?.(result)
		option.complete?.(result)
	
		return
	}
	
	// if(option.maunal == true){
	// 	// 指定了手动模式
	// 	let manunalIntent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS);
	// 	getUniActivity()!!.startActivity(manunalIntent);
		
	// 	result.errCode = 0
	// 	result.errMsg = "connectWifi:ok"
		
	// 	option.success
		
	// 	?.(result)
	// 	option.complete?.(result)
	// 	return 
	// }
	
	// 执行后续的逻辑
	let scanWifiInfo:UniWifiInfo|null = null
	for (let scanResult in Global.scanList) {
		
		if (scanResult.SSID.equals(option.SSID)) {
			scanWifiInfo = scanResult
		}
	}
	
	if(scanWifiInfo == null){
		// 不在扫描列表中返回错误
		option.fail?.(result)
		option.complete?.(result)
		
		return
	}
	
	console.log(scanWifiInfo);
	
	let wifiConfigration = wrapWifiConfiguration(option.SSID,option.password);
	
	let wifiManager: WifiManager =
		getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager
	
	let targetExistConfig:WifiConfiguration|null = null
	let existingConfigs = wifiManager.getConfiguredNetworks();
	for (let existingConfig in existingConfigs) {
		if (existingConfig.SSID.equals("\"" + option.SSID + "\"")) {
			targetExistConfig = existingConfig
		}
	}
	
	if (targetExistConfig != null) {
		wifiManager.removeNetwork(targetExistConfig.networkId);
	}
	
	let netID = wifiManager.addNetwork(wifiConfigration);
	let enabled = wifiManager.enableNetwork(netID, true);
	let connected = wifiManager.reconnect();
	
	console.log(connected);
	
	
	
杜庆泉's avatar
杜庆泉 已提交
390 391
}

杜庆泉's avatar
杜庆泉 已提交
392 393 394
/**
 * 开启wifi
 */
杜庆泉's avatar
杜庆泉 已提交
395
export function startWifi(option: WifiOption) {
396
	
打打卡夫卡's avatar
打打卡夫卡 已提交
397 398
	
	
杜庆泉's avatar
杜庆泉 已提交
399 400 401
	// 需要先开启wifi,才能使用后续的功能
	let requestCode = 1001;
	let permissionWifi = arrayOf("android.permission.ACCESS_FINE_LOCATION");
打打卡夫卡's avatar
打打卡夫卡 已提交
402 403 404 405
	var result = {
		errCode: 12001,
		errMsg: "startWifi:premission loss"
	}
杜庆泉's avatar
杜庆泉 已提交
406
	// 检查权限
杜庆泉's avatar
杜庆泉 已提交
407 408
	if (ActivityCompat.checkSelfPermission(getUniActivity()!, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

杜庆泉's avatar
杜庆泉 已提交
409 410 411 412
		ActivityCompat.requestPermissions(getUniActivity()!, permissionWifi, requestCode)
		// 尚不具备权限,返回错误
		option.fail?.(result)
		option.complete?.(result)
杜庆泉's avatar
杜庆泉 已提交
413

杜庆泉's avatar
杜庆泉 已提交
414
		return;
杜庆泉's avatar
杜庆泉 已提交
415 416
	}

杜庆泉's avatar
杜庆泉 已提交
417 418
	// 具备了权限,继续前进
	let wifiManager: WifiManager =
杜庆泉's avatar
杜庆泉 已提交
419 420
		getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager

杜庆泉's avatar
杜庆泉 已提交
421 422 423
	if (Global.mReceiver == null) {
		Global.mReceiver = new CustomBroadcastReceiver(wifiManager)
	}
杜庆泉's avatar
杜庆泉 已提交
424

杜庆泉's avatar
杜庆泉 已提交
425 426
	let filter = new IntentFilter()
	filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
打打卡夫卡's avatar
打打卡夫卡 已提交
427
	// @ts-ignore
杜庆泉's avatar
杜庆泉 已提交
428
	filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION)
打打卡夫卡's avatar
打打卡夫卡 已提交
429
	// @ts-ignore
杜庆泉's avatar
杜庆泉 已提交
430
	filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
杜庆泉's avatar
杜庆泉 已提交
431

杜庆泉's avatar
杜庆泉 已提交
432
	getUniActivity()!.registerReceiver(Global.mReceiver, filter)
杜庆泉's avatar
杜庆泉 已提交
433
	wifiManager.startScan()
打打卡夫卡's avatar
打打卡夫卡 已提交
434 435 436
	result.errCode = 0
	result.errMsg = "startWifi:ok"
	
杜庆泉's avatar
杜庆泉 已提交
437 438
	option.success?.(result)
	option.complete?.(result)
杜庆泉's avatar
杜庆泉 已提交
439

440 441
}

杜庆泉's avatar
杜庆泉 已提交
442 443 444 445

/**
 * 关闭wifi
 */
杜庆泉's avatar
杜庆泉 已提交
446
export function stopWifi(option: WifiOption) {
杜庆泉's avatar
杜庆泉 已提交
447 448 449
	// 需要先开启wifi,才能使用后续的功能
	if (Global.mReceiver == null) {
		var result = {
杜庆泉's avatar
杜庆泉 已提交
450 451 452
			errNo: 12000,
			errCode: 12000,
			errMsg: "stopWifi:not init"
杜庆泉's avatar
杜庆泉 已提交
453 454 455
		}
		option.fail?.(result)
		option.complete?.(result)
杜庆泉's avatar
杜庆泉 已提交
456 457

		return
杜庆泉's avatar
杜庆泉 已提交
458
	}
杜庆泉's avatar
杜庆泉 已提交
459

杜庆泉's avatar
杜庆泉 已提交
460 461
	getUniActivity()!.unregisterReceiver(Global.mReceiver)
	var result = {
杜庆泉's avatar
杜庆泉 已提交
462 463 464
		errNo: 0,
		errCode: 0,
		errMsg: "stopWifi:ok"
465
	}
杜庆泉's avatar
杜庆泉 已提交
466 467
	option.success?.(result)
	option.complete?.(result)
杜庆泉's avatar
杜庆泉 已提交
468

杜庆泉's avatar
杜庆泉 已提交
469 470 471 472 473 474
}

/**
 * 获取当前连接中的wifi信息
 */
export function getConnectedWifi(option: GetConnectedWifiOptions) {
杜庆泉's avatar
杜庆泉 已提交
475

打打卡夫卡's avatar
打打卡夫卡 已提交
476 477 478 479 480 481 482 483
	let wifiInfo = new UniWifiInfo(null)

	var res = {
		errCode: 12000,
		errMsg: "getConnectedWifi:fail:not invoke startWifi",
		wifi:wifiInfo
	}

484
	if (Global.mReceiver == null) {
打打卡夫卡's avatar
打打卡夫卡 已提交
485 486 487
		// 还没调用startWifi 提示报错
		option.fail?.(res)
		option.complete?.(res)
488 489 490 491
	
		return
	}
	
杜庆泉's avatar
杜庆泉 已提交
492
	if (ActivityCompat.checkSelfPermission(getUniActivity()!, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
杜庆泉's avatar
杜庆泉 已提交
493
		// 尚不具备权限,返回错误
打打卡夫卡's avatar
打打卡夫卡 已提交
494 495 496
		res.errCode = 12001
		res.errMsg = "getConnectedWifi:permission loss"
		
杜庆泉's avatar
杜庆泉 已提交
497 498 499
		option.fail?.(res)
		option.complete?.(res)
		return;
杜庆泉's avatar
杜庆泉 已提交
500 501
	}

502 503 504 505
	// TODO 应该try catch一下,把系统的错误码给返回来,然后和微信的错误码拉齐
	// 需要先校验权限,没有位置权限无法获取wifi
	const context = getAppContext();
	if (context != null) {
杜庆泉's avatar
杜庆泉 已提交
506 507 508
		const wm = context.getSystemService(
			Context.WIFI_SERVICE
		) as WifiManager;
杜庆泉's avatar
杜庆泉 已提交
509
		// 测试android 12上可以使用
打打卡夫卡's avatar
打打卡夫卡 已提交
510
		//@ts-ignore
杜庆泉's avatar
杜庆泉 已提交
511
		const winfo = wm.getConnectionInfo();
杜庆泉's avatar
杜庆泉 已提交
512
		// 封装成数据对象
打打卡夫卡's avatar
打打卡夫卡 已提交
513
		wifiInfo.wrapConnectInfo(winfo);
杜庆泉's avatar
杜庆泉 已提交
514

杜庆泉's avatar
杜庆泉 已提交
515 516
		res.errCode = 0
		res.errMsg = "getConnectedWifi:ok"
打打卡夫卡's avatar
打打卡夫卡 已提交
517
		res.wifi = wifiInfo;
杜庆泉's avatar
杜庆泉 已提交
518 519 520
		option.success?.(res)
		option.complete?.(res)
		return
521
	}
杜庆泉's avatar
杜庆泉 已提交
522 523
	option.fail?.(res)
	option.complete?.(res)
524
}