diff --git a/pages.json b/pages.json index 6d5f98fd683b6053d1330e4fbed671858e14b288..78892ea794ec7c870eb934969b6de3d611a5ce09 100644 --- a/pages.json +++ b/pages.json @@ -123,15 +123,6 @@ "enablePullDownRefresh": false } - }, - { - "path" : "pages/SystemAPI/android/wifi", - "style" : - { - "navigationBarTitleText": "", - "enablePullDownRefresh": false - } - }, { diff --git a/pages/SystemAPI/SystemAPI.vue b/pages/SystemAPI/SystemAPI.vue index 7d118ccbe5ea08bcf6c42acdc44933c547f6b6ce..4f44d94764ed529bea894cdc12c6ae9e370268c1 100644 --- a/pages/SystemAPI/SystemAPI.vue +++ b/pages/SystemAPI/SystemAPI.vue @@ -5,7 +5,6 @@ - @@ -86,12 +85,8 @@ title:'需要在自定义基座中运行' }) } - }, - testGotoWifi() { - uni.navigateTo({ - url:'/pages/SystemAPI/android/wifi' - }) - }, + } + } } diff --git a/pages/SystemAPI/android/wifi.vue b/pages/SystemAPI/android/wifi.vue deleted file mode 100644 index 5d473e67815b164d6a2821bd26e390f9a37fe881..0000000000000000000000000000000000000000 --- a/pages/SystemAPI/android/wifi.vue +++ /dev/null @@ -1,101 +0,0 @@ - - - - - diff --git a/uni_modules/uni-wifi/changelog.md b/uni_modules/uni-wifi/changelog.md deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/uni_modules/uni-wifi/package.json b/uni_modules/uni-wifi/package.json deleted file mode 100644 index d6b43d8c1807354ee8bf0b7ad04df2d77486ec01..0000000000000000000000000000000000000000 --- a/uni_modules/uni-wifi/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "id": "uni-wifi", - "displayName": "uni-wifi", - "version": "1.0.0", - "description": "wifi管理", - "keywords": [ - "wifi" -], - "repository": "", - "engines": { - "HBuilderX": "^3.6.8" - }, - "dcloudext": { - "type": "uts", - "sale": { - "regular": { - "price": "0.00" - }, - "sourcecode": { - "price": "0.00" - } - }, - "contact": { - "qq": "" - }, - "declaration": { - "ads": "", - "data": "", - "permissions": "" - }, - "npmurl": "" - }, - "uni_modules": { - "uni-ext-api":{ - "uni": { - "getConnectedWifi": "getConnectedWifi", - "startWifi": "startWifi", - "stopWifi": "stopWifi", - "getWifiList":"getWifiList", - "onGetWifiList":"onGetWifiList", - "onWifiConnected":"onWifiConnected", - "connectWifi":"connectWifi" - } - }, - "dependencies": [], - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "u", - "aliyun": "u" - }, - "client": { - "Vue": { - "vue2": "u", - "vue3": "u" - }, - "App": { - "app-android": "u", - "app-ios": "u" - }, - "H5-mobile": { - "Safari": "u", - "Android Browser": "u", - "微信浏览器(Android)": "u", - "QQ浏览器(Android)": "u" - }, - "H5-pc": { - "Chrome": "u", - "IE": "u", - "Edge": "u", - "Firefox": "u", - "Safari": "u" - }, - "小程序": { - "微信": "u", - "阿里": "u", - "百度": "u", - "字节跳动": "u", - "QQ": "u", - "钉钉": "u", - "快手": "u", - "飞书": "u", - "京东": "u" - }, - "快应用": { - "华为": "u", - "联盟": "u" - } - } - } - } -} \ No newline at end of file diff --git a/uni_modules/uni-wifi/readme.md b/uni_modules/uni-wifi/readme.md deleted file mode 100644 index 1ba726b53db240c70ef99e8977261078dbe704e1..0000000000000000000000000000000000000000 --- a/uni_modules/uni-wifi/readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# wa-wifi -### 开发文档 -[UTS 语法](https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html) -[UTS 原生插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html) -[Hello UTS](https://gitcode.net/dcloud/hello-uts/-/tree/dev) \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-android/config.json b/uni_modules/uni-wifi/utssdk/app-android/config.json deleted file mode 100644 index 38a5fc651efafdf061ed8180bf5d145832e70365..0000000000000000000000000000000000000000 --- a/uni_modules/uni-wifi/utssdk/app-android/config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "abis": [ - "arm64-v8a" - ], - "dependencies": [ - "com.google.code.gson:gson:2.8.9" - ], - "minSdkVersion": 21 -} - diff --git a/uni_modules/uni-wifi/utssdk/app-android/index.uts b/uni_modules/uni-wifi/utssdk/app-android/index.uts deleted file mode 100644 index d47461e39acb631fb3f99a7c5e37d61a4b45e27f..0000000000000000000000000000000000000000 --- a/uni_modules/uni-wifi/utssdk/app-android/index.uts +++ /dev/null @@ -1,604 +0,0 @@ -import Context from "android.content.Context"; -import {UTSAndroid } from "io.dcloud.uts"; -import WifiManager from "android.net.wifi.WifiManager"; -import WifiInfo from "android.net.wifi.WifiInfo"; -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"; -import Thread from "java.lang.Thread"; -import WifiConfiguration from 'android.net.wifi.WifiConfiguration'; -import AuthAlgorithm from 'android.net.wifi.WifiConfiguration.AuthAlgorithm'; -import KeyMgmt from 'android.net.wifi.WifiConfiguration.KeyMgmt'; -import TextUtils from 'android.text.TextUtils'; - -/** - * Wifi 函数通用入参封装 - */ -type WifiOption = { - success?: (res: object) => void; - fail?: (res: object) => void; - complete?: (res: object) => void; -}; - -/** - * 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; -} - - -function isHex(key:string):boolean { - for (var i = key.length - 1; i >= 0; i--) { - let c = key.charAt(i); - if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' - && c <= 'f')) { - return false; - } - } - - return true; -} - - -/** - * 判断是否是wep格式的key - */ -function isHexWepKey(wepKey:string):boolean { - let len = wepKey.length; - - // WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?) - if (len != 10 && len != 26 && len != 58) { - return false; - } - - return isHex(wepKey); -} - -function wrapWifiConfiguration(SSID:string ,password:string,passwordType:string):WifiConfiguration { - - let config = new WifiConfiguration(); - - config.allowedAuthAlgorithms.clear(); - config.allowedGroupCiphers.clear(); - config.allowedKeyManagement.clear(); - config.allowedPairwiseCiphers.clear(); - config.allowedProtocols.clear(); - config.SSID = "\"" + SSID + "\""; - - - // nopass - if ("NONE".equals(passwordType)) { - config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); - } - // // wep - if ("WEP".equals(passwordType)) { - if (!TextUtils.isEmpty(password)) { - if (isHexWepKey(password)) { - config.wepKeys[0] = password; - } else { - config.wepKeys[0] = "\"" + password + "\""; - } - } - config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); - config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); - config.allowedKeyManagement.set(KeyMgmt.NONE); - config.wepTxKeyIndex = 0; - } - // wpa - if ("WPA".equals(passwordType)) { - config.preSharedKey = "\"" + password + "\""; - config.hiddenSSID = true; - config.allowedAuthAlgorithms - .set(WifiConfiguration.AuthAlgorithm.OPEN); - config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); - config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); - config.allowedPairwiseCiphers - .set(WifiConfiguration.PairwiseCipher.TKIP); - // 此处需要修改否则不能自动重联 - config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); - config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); - config.allowedPairwiseCiphers - .set(WifiConfiguration.PairwiseCipher.CCMP); - config.status = WifiConfiguration.Status.ENABLED; - } - - return config; -} -/** - * Wifi信息统一数据结构 - */ -class UniWifiInfo { - - SSID: String = ""; - BSSID: String = ""; - secure: boolean = false; - signalStrength: Number = 0; - frequency: Number = 0; - - /*下面的字段属于扩展字段*/ - securityType:string = "" - - constructor(scanResult?: ScanResult) { - if (scanResult != null) { - // 如果是通过扫描列表得到的数据,进行封装 - this.BSSID = scanResult.BSSID; - this.SSID = scanResult.SSID; - - this.signalStrength = scanResult.level; - this.frequency = scanResult.frequency; - - // 是否安全,微信的标准是是否需要密码。 来源:https://developers.weixin.qq.com/community/develop/doc/00064cf1790458db19cddf9925ac00?highLine=WifiInfo - this.secure = false; - let capabilities = scanResult.capabilities.trim(); - if ((capabilities.equals(Global.WIFI_AUTH_OPEN) || capabilities.equals(Global.WIFI_AUTH_ROAM))) { - this.secure = false; - } else { - this.secure = true; - } - - /*扩展字段*/ - this.securityType = getSecurityType(scanResult); - } - } - - /** - * 根据connectInfo 链接信息对wifi数据结构进行初始化 - */ - wrapConnectInfo(connectInfo: WifiInfo): void { - console.log(connectInfo.getSSID()); - console.log(connectInfo.getBSSID()); - if (connectInfo.getBSSID() == null) { - return - } - 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); - } - this.SSID = s; - } - - this.BSSID = connectInfo.getBSSID(); - //Android返回的值是-100~0,而微信API规范是0~100,值越大信号越好,需要+100拉齐 - this.signalStrength = connectInfo.getRssi() + 100; - this.frequency = connectInfo.getFrequency(); - - } - - -} - -/** - * 获取当前链接的wifi信息 - */ -type GetConnectedWifiOptions = { - partialInfo?: boolean - success?: (res: UTSJSONObject) => void - fail?: (res: UTSJSONObject) => void - complete?: (res: UTSJSONObject) => void -} - - - -/** - * 全局数据储存 - */ -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[] = [] -} - - -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"; -} - - -/** - * 自定义wifi变化广播监听器 - */ -class CustomBroadcastReceiver extends BroadcastReceiver { - - mWifiManager?: WifiManager = null; - - constructor(wifiManager: WifiManager) { - super(); - this.mWifiManager = wifiManager; - } - - override onReceive(_context: Context, intent: Intent): void { - - - 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) - //做一些异步操作 - setTimeout(function() { - // BroadcastReceiver 中不能执行耗时任务,需要使用setTimeout - console.log(Thread.currentThread().getName()) - // @ts-ignore - let winfo = this.mWifiManager!.getConnectionInfo(); - while (winfo.bssid == null) { - Thread.sleep(1000) - winfo = this.mWifiManager!.getConnectionInfo(); - } - - // 封装成数据对象 - uniWifiInfo.wrapConnectInfo(winfo) - let res = { - errMsg: 'onWifiConnected:ok', - errCode: 0, - wifi: uniWifiInfo - } - // wifi状态可用了,分发当前的链接状态给已注册的监听集合 - for (let perCallback in Global.onWifiConnectCallbackList) { - perCallback(res); - } - - }, 100); - } - - } - - - if (intent.action == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) { - // wifi 扫描结果回调 - let results = this.mWifiManager!.scanResults; - - if (results != null) { - Global.scanList = [] - for (let scanResult in results) { - if (scanResult.SSID == null) { - continue; - } - Global.scanList.push(new UniWifiInfo(scanResult)); - } - - // 挨个通知,所有的监听器 - for (let perCallback in Global.getWifiListCallbackList) { - - const data = new JSONObject(); - let mainJsonStr = Gson().toJson(Global.scanList); - data["wifiList"] = mainJsonStr - perCallback(data); - } - - } - - } - } - -} - - - -/************************* 下面是对外提供的函数 *************************/ - -/** - * 获取wifi列表 - */ - -export function getWifiList(option: WifiOption) { - - if (Global.mReceiver == null) { - // 还没调用startWifi 提示报错 - var result = { - errCode: 12000, - errMsg: "getWifiList:fail:not invoke startWifi", - errSubject:"uni-getWifiList" - } - option.fail?.(result) - option.complete?.(result) - return - } - - let wifiManager: WifiManager = - UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager - wifiManager.startScan() - - let ret = { - errCode: 0, - errMsg: "getWifiList:ok" - } - option.success?.(ret) - option.complete?.(ret) - -} - - - -/** - * wifi 链接成功的回调注册 - */ -export function onWifiConnected(callback: UTSCallback) { - Global.onWifiConnectCallbackList.push(callback) -} - -/** - * wifi 链接成功的回调取消注册 - */ -export function offWifiConnected(callback: UTSCallback) { - let callbackIndex = Global.onWifiConnectCallbackList.indexOf(callback) - if (callbackIndex > 0) { - Global.onWifiConnectCallbackList.splice(callbackIndex, 1); - } -} - -/** - * 注册Wifi列表的监听事件 - */ -export function onGetWifiList(callback: UTSCallback) { - Global.getWifiListCallbackList.push(callback) -} -/** - * 取消注册Wifi列表的监听事件 - */ -export function offGetWifiList(callback: UTSCallback) { - let callbackIndex = Global.getWifiListCallbackList.indexOf(callback) - if (callbackIndex > 0) { - Global.getWifiListCallbackList.splice(callbackIndex, 1); - } -} - - -/** - * 链接指定wifi - */ -export function connectWifi(option: WifiConnectOption) { - - - var result = { - errCode: 12000, - errMsg: "connectWifi:fail:not invoke startWifi", - errSubject:"uni-connectWifi" - } - - 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); - UTSAndroid.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(JSON.stringify(scanWifiInfo.securityType)); - - let wifiConfigration = wrapWifiConfiguration(option.SSID,option.password,scanWifiInfo.securityType); - - let wifiManager: WifiManager = - UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager - - // 如果已经存在了指定wifi 配置,移除之 - 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); - } - - try { - let netID = wifiManager.addNetwork(wifiConfigration); - let enabled = wifiManager.enableNetwork(netID, true); - let connected = wifiManager.reconnect(); - console.log(connected); - } catch (e) { - // TODO: handle exception - console.log(e); - // e.printStackTrace(); - - } - - result.errCode = 0 - result.errMsg = "connectWifi:ok" - - option.success?.(result) - option.complete?.(result) - - -} - -/** - * 开启wifi - */ -export function startWifi(option: WifiOption) { - - - - // 需要先开启wifi,才能使用后续的功能 - let requestCode = 1001; - let permissionWifi = arrayOf("android.permission.ACCESS_FINE_LOCATION"); - var result = { - errCode: 12001, - errMsg: "startWifi:premission loss", - errSubject:"uni-startWifi", - } - // 检查权限 - if (ActivityCompat.checkSelfPermission(UTSAndroid.getUniActivity()!, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - - ActivityCompat.requestPermissions(UTSAndroid.getUniActivity()!, permissionWifi, requestCode) - // 尚不具备权限,返回错误 - option.fail?.(result) - option.complete?.(result) - - return; - } - - // 具备了权限,继续前进 - let wifiManager: WifiManager = - UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager - - if (Global.mReceiver == null) { - Global.mReceiver = new CustomBroadcastReceiver(wifiManager) - } - - let filter = new IntentFilter() - filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) - // @ts-ignore - filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) - // @ts-ignore - filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); - - UTSAndroid.getUniActivity()!.registerReceiver(Global.mReceiver, filter) - wifiManager.startScan() - result.errCode = 0 - result.errMsg = "startWifi:ok" - - option.success?.(result) - option.complete?.(result) - -} - - -/** - * 关闭wifi - */ -export function stopWifi(option: WifiOption) { - // 需要先开启wifi,才能使用后续的功能 - if (Global.mReceiver == null) { - var result = { - errNo: 12000, - errCode: 12000, - errSubject:"uni-stopWifi", - errMsg: "stopWifi:not init" - } - option.fail?.(result) - option.complete?.(result) - - return - } - try{ - UTSAndroid.getUniActivity()!.unregisterReceiver(Global.mReceiver) - }catch(e){ - // 可能存在重复 - //console.log(e); - } - - var result = { - errNo: 0, - errCode: 0, - errMsg: "stopWifi:ok" - } - option.success?.(result) - option.complete?.(result) - -} - -/** - * 获取当前连接中的wifi信息 - */ -export function getConnectedWifi(option: GetConnectedWifiOptions) { - - let wifiInfo = new UniWifiInfo(null) - - var res = { - errCode: 12000, - errMsg: "getConnectedWifi:fail:not invoke startWifi", - errSubject:"uni-getConnectedWifi", - wifi:wifiInfo - } - - if (Global.mReceiver == null) { - // 还没调用startWifi 提示报错 - option.fail?.(res) - option.complete?.(res) - - return - } - - if (ActivityCompat.checkSelfPermission(UTSAndroid.getUniActivity()!, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - // 尚不具备权限,返回错误 - res.errCode = 12001 - res.errMsg = "getConnectedWifi:permission loss" - - option.fail?.(res) - option.complete?.(res) - return; - } - - // TODO 应该try catch一下,把系统的错误码给返回来,然后和微信的错误码拉齐 - // 需要先校验权限,没有位置权限无法获取wifi - const context = UTSAndroid.getAppContext(); - if (context != null) { - const wm = context.getSystemService( - Context.WIFI_SERVICE - ) as WifiManager; - // 测试android 12上可以使用 - //@ts-ignore - const winfo = wm.getConnectionInfo(); - // 封装成数据对象 - wifiInfo.wrapConnectInfo(winfo); - - res.errCode = 0 - res.errMsg = "getConnectedWifi:ok" - res.wifi = wifiInfo; - option.success?.(res) - option.complete?.(res) - return - } - option.fail?.(res) - option.complete?.(res) -} \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-ios/index.uts b/uni_modules/uni-wifi/utssdk/app-ios/index.uts deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000