From c6657efbaea814895786551ac8f31b82a51ecb51 Mon Sep 17 00:00:00 2001 From: yanyilin Date: Mon, 30 Oct 2023 15:44:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E6=BA=90=EF=BC=9Auni.getNetworkType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- uni_modules/uni-getNetworkType/changelog.md | 0 uni_modules/uni-getNetworkType/package.json | 93 ++++++++++++++++ uni_modules/uni-getNetworkType/readme.md | 6 ++ .../utssdk/app-android/AndroidManifest.xml | 7 ++ .../utssdk/app-android/index.uts | 102 ++++++++++++++++++ .../utssdk/app-ios/index.uts | 0 .../uni-getNetworkType/utssdk/interface.uts | 63 +++++++++++ 7 files changed, 271 insertions(+) create mode 100644 uni_modules/uni-getNetworkType/changelog.md create mode 100644 uni_modules/uni-getNetworkType/package.json create mode 100644 uni_modules/uni-getNetworkType/readme.md create mode 100644 uni_modules/uni-getNetworkType/utssdk/app-android/AndroidManifest.xml create mode 100644 uni_modules/uni-getNetworkType/utssdk/app-android/index.uts create mode 100644 uni_modules/uni-getNetworkType/utssdk/app-ios/index.uts create mode 100644 uni_modules/uni-getNetworkType/utssdk/interface.uts diff --git a/uni_modules/uni-getNetworkType/changelog.md b/uni_modules/uni-getNetworkType/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/uni-getNetworkType/package.json b/uni_modules/uni-getNetworkType/package.json new file mode 100644 index 0000000..23fe862 --- /dev/null +++ b/uni_modules/uni-getNetworkType/package.json @@ -0,0 +1,93 @@ +{ + "id": "uni-getNetworkType", + "displayName": "uni-getNetworkType", + "version": "1.0.0", + "description": "uni-getNetworkType", + "keywords": [ + "uni-getNetworkType" +], + "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": { + "dependencies": [], + "uni-ext-api": { + "uni": { + "getNetworkType": { + "name": "getNetworkType", + "app": { + "js": false, + "kotlin": true, + "swift": false + } + } + } + }, + "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-getNetworkType/readme.md b/uni_modules/uni-getNetworkType/readme.md new file mode 100644 index 0000000..b34eae0 --- /dev/null +++ b/uni_modules/uni-getNetworkType/readme.md @@ -0,0 +1,6 @@ +# uni-getNetworkType +### 开发文档 +[UTS 语法](https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html) +[UTS API插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html) +[UTS 组件插件](https://uniapp.dcloud.net.cn/plugin/uts-component.html) +[Hello UTS](https://gitcode.net/dcloud/hello-uts) \ No newline at end of file diff --git a/uni_modules/uni-getNetworkType/utssdk/app-android/AndroidManifest.xml b/uni_modules/uni-getNetworkType/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 0000000..51cd013 --- /dev/null +++ b/uni_modules/uni-getNetworkType/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/uni_modules/uni-getNetworkType/utssdk/app-android/index.uts b/uni_modules/uni-getNetworkType/utssdk/app-android/index.uts new file mode 100644 index 0000000..5ecde35 --- /dev/null +++ b/uni_modules/uni-getNetworkType/utssdk/app-android/index.uts @@ -0,0 +1,102 @@ +import { GetNetworkTypeOptions, GetNetworkType, GetNetworkTypeSuccess } from "../interface.uts"; +import UTSAndroid from 'io.dcloud.uts.UTSAndroid'; +import Context from 'android.content.Context'; +import ConnectivityManager from 'android.net.ConnectivityManager'; +import TelephonyManager from 'android.telephony.TelephonyManager'; +import Build from 'android.os.Build'; + + +export const getNetworkType : GetNetworkType = function (options : GetNetworkTypeOptions) { + const context = UTSAndroid.getUniActivity()!!; + const connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager; + + if (connectivityManager != null) { + if (Build.VERSION.SDK_INT >= 23) { + const permissions = ["android.permission.ACCESS_NETWORK_STATE"]; + if (!UTSAndroid.checkSystemPermissionGranted(context, permissions)) { + const result : GetNetworkTypeSuccess = { + networkType: "none" + } + options?.success?.(result); + options?.complete?.(result); + return + } + } + const activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + + if (activeNetworkInfo != null) { + if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + const result : GetNetworkTypeSuccess = { + networkType: "wifi" + } + options?.success?.(result); + options?.complete?.(result); + } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { + let type = "unknown"; + const subtype = activeNetworkInfo.getSubtype(); + switch (subtype) { + case TelephonyManager.NETWORK_TYPE_CDMA: + case TelephonyManager.NETWORK_TYPE_EDGE: + case TelephonyManager.NETWORK_TYPE_GPRS: + case 7://电信2g 努比亚 + type = "2g"; + break; + case TelephonyManager.NETWORK_TYPE_EVDO_0: + case TelephonyManager.NETWORK_TYPE_EVDO_A: + case 12://level9以上支持 TelephonyManager.NETWORK_TYPE_EVDO_B = 12 + case 14://电信 努比亚 + //3G 电信 + type = "3g"; + break; + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_UMTS: + //3G 联通 + type = "3g"; + break; + case 17: + case 18: + //3G 移动(目前华为系统切换到3g时候为此值) + type = "3g"; + break; + case 13: //level11 以上支持TelephonyManager.NETWORK_TYPE_LTE = 13 + case 11: //level8以上支持TelephonyManager.NETWORK_TYPE_IDEN=11 + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + case 15://stype == TelephonyManager.NETWORK_TYPE_HSPAP + type = "4g"; + break; + case TelephonyManager.NETWORK_TYPE_NR: { + type = "5g"; + break; + } + default://对于case之外的反馈到js,js层收集之后回馈5+进行填补完善 + type = "" + subtype; + break; + } + const result : GetNetworkTypeSuccess = { + networkType: type + } + options?.success?.(result); + options?.complete?.(result); + } else { + const result : GetNetworkTypeSuccess = { + networkType: "unknown" + } + options?.success?.(result); + options?.complete?.(result); + } + }else{ + const result : GetNetworkTypeSuccess = { + networkType: "none" + } + options?.success?.(result); + options?.complete?.(result); + } + } else { + const result : GetNetworkTypeSuccess = { + networkType: "none" + } + options?.success?.(result); + options?.complete?.(result); + } +}; \ No newline at end of file diff --git a/uni_modules/uni-getNetworkType/utssdk/app-ios/index.uts b/uni_modules/uni-getNetworkType/utssdk/app-ios/index.uts new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/uni-getNetworkType/utssdk/interface.uts b/uni_modules/uni-getNetworkType/utssdk/interface.uts new file mode 100644 index 0000000..5b3fbe1 --- /dev/null +++ b/uni_modules/uni-getNetworkType/utssdk/interface.uts @@ -0,0 +1,63 @@ +export interface Uni { + /** + * getNetworkType() + * @description + * 获取网络类型 + * @param {GetNetworkTypeOptions} options + * @return {void} + * @tutorial http://uniapp.dcloud.io/api/system/network?id=getnetworktype + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "√", + * "unixVer": "3.9+" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "√", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.getNetworkType({ + success(res){ + console.log(res); + } + }); + ``` + */ + getNetworkType(options: GetNetworkTypeOptions): void; +} + +export type GetNetworkType = (options: GetNetworkTypeOptions) => void; +export type GetNetworkTypeSuccess = { + /** + * 网络类型 + */ + networkType: string +}; +export type GetNetworkTypeSuccessCallback = (result: GetNetworkTypeSuccess) => void; +export type GetNetworkTypeFail = UniError; +export type GetNetworkTypeFailCallback = (result: GetNetworkTypeFail) => void; +export type GetNetworkTypeComplete = any; +export type GetNetworkTypeCompleteCallback = (result: GetNetworkTypeComplete) => void; +export type GetNetworkTypeOptions = { + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success?: GetNetworkTypeSuccessCallback | null, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail?: GetNetworkTypeFailCallback | null, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete?: GetNetworkTypeCompleteCallback | null +}; -- GitLab