uniapp打开应用时切换WIFI,仅支持安卓

1,395 阅读1分钟

uniapp Wi-Fi功能模块

App平台由 uni ext api 实现,需下载插件:uni-WiFi

注意:导入uni_modules规范插件需要使用 3.1.0 以上版本的 HBuilderX

需要具备下面的权限

"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>"
const connectWifi=()=>{
	// #ifdef APP-PLUS
	uni.getNetworkType({
	    success: function (res) {
			if(res.networkType != "wifi"){
				uni.showToast({
					icon:'none',
					duration:2000,
					title:"未连接WIFI,自动连接AGV-WIFI",
				})
				contentWifi()
			}else{
				//判断获取的WiFi是否为机型WiFi
				// 主窗体  
				var MainActivity = plus.android.runtimeMainActivity()  
				// 上下文  
				var Context = plus.android.importClass('android.content.Context')  
				// 导入WIFI管理 和 WIFI 信息 的class  
				plus.android.importClass("android.net.wifi.WifiManager")  
				plus.android.importClass("android.net.wifi.WifiInfo")  
				plus.android.importClass("android.net.wifi.ScanResult")  
				plus.android.importClass("java.util.ArrayList")  
				// 获取 WIFI 管理实例  
				var wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE)  

				// 获取当前连接WIFI的信息  
				var info = wifiManager.getConnectionInfo()  
				
				// 获取当前 WIFI 连接的 SSID (WIFI 名称)  
				var ssid = info.getSSID()  
				// 这里的 获取到的名称 是 带 双引号的 如 "cmcc"    
				// 所以我们这里处理一下  
				ssid = ssid.replace(/(^\"*)|(\"*$)/g, "")  
				console.log("info",ssid)
				if(ssid!=uni.getStorageSync('WIFI-name')){
					uni.showLoading({
						title: "正在切换WIFI至"+uni.getStorageSync('WIFI-name')
					})
					
					contentWifi()
				}
				// var resultList = wifiManager.getScanResults(),  
				// 	len = resultList.size()  
				// for(var i = 0; i < len; i++) {  
				// 	console.log(resultList.get(i).plusGetAttribute('SSID'))   
				// 	let aaa = resultList.get(i).plusGetAttribute('SSID')
	        }
		}
	})
	// #endif
}

const contentWifi = () => {
	uni.getSystemInfo({
		success: function(res){
			let system = ''
			// console.log("当前手机型号===>", res)
			if(res.platform == 'android'&&res.system.substr(8)>10){
				// 当安卓系统版本大于10时,需要跳转到WIFI设置页,手动连接WIFI
				var main = plus.android.runtimeMainActivity();  
				var Intent = plus.android.importClass("android.content.Intent");  
				var mIntent = new Intent('android.settings.WIFI_SETTINGS');  
				main.startActivity(mIntent)
				uni.hideLoading();
				return
			}
			// if (res.platform == 'android') {
			// 	system = parseInt(res.system.substr(8))
			// }
			// if (res.platform == 'ios') {
			// 	system = parseInt(res.system.substr(4))
			// }
			// if (res.platform == 'android' && system < 6) {
			// 	uni.showToast({
			// 		title: '手机版本不支持',
			// 		icon: 'none'
			// 	})
			// 	return
			// }
			if (res.platform == 'ios') {
				uni.showToast({
					title: '手机版本不支持',
					icon: 'none'
				})
				return
			}
			//初始wifi模块
			startWifi()
		}
	})
}

// 初始化WIFI模块
const startWifi = async() => {
	uni.startWifi({
		success: function(res){
			// uni.showToast({
			// 	title: "初始化WIFI成功"
			// })
			setTimeout(() => {
				connected()
			}, 4000);
		},
		fail: function(error) {
			// uni.showToast({
			// 	title: '初始化WIFI失败',
			// 	icon: 'error'
			// })
		},
		complete: function() {
			// uni.showToast({
			// 	title: '初始化WIFI完成',
			// 	icon: 'error'
			// })
		}
	})
}

const connected = () => {
	uni.connectWifi({
		SSID: uni.getStorageSync('WIFI-name'), //Wi-Fi 设备名称
		password: uni.getStorageSync('WIFI-pwd'), //Wi-Fi 密码
		success: (res) => {
			// uni.showToast({
			// 	title: "已连接到网络"+uni.getStorageSync('WIFI-name'),
			// 	icon: 'none'
			// })
			uni.hideLoading();
		},
		fail: (error) => {
			uni.showToast({
				title: '网络'+uni.getStorageSync('WIFI-name')+'连接失败',
				icon: 'none',
			})
			uni.hideLoading();
		}
	})
}

module.exports = {
	connectWifi
}