diff --git a/pages.json b/pages.json index b03ff199bf529719c7bee539ccaef2aa7140014e..26865d401b9a7aa7fafb10b184b03fbd05c122de 100644 --- a/pages.json +++ b/pages.json @@ -1015,6 +1015,14 @@ "navigationBarTitleText" : "transitionend事件", "enablePullDownRefresh" : false } + }, + { + "path" : "pages/API/install-apk/install-apk", + "style" : + { + "navigationBarTitleText" : "install-apk", + "enablePullDownRefresh" : false + } } ], diff --git a/pages/API/install-apk/install-apk.uvue b/pages/API/install-apk/install-apk.uvue new file mode 100644 index 0000000000000000000000000000000000000000..af849b8debea300eb30ca0bc0cc05a505287de8f --- /dev/null +++ b/pages/API/install-apk/install-apk.uvue @@ -0,0 +1,47 @@ + + + + diff --git a/pages/tabBar/API.uvue b/pages/tabBar/API.uvue index 61c0dc4f2cb822def0a2071032b7facf534ef011..839df655a5ad094808e96180f9af89aef37ac4ea 100644 --- a/pages/tabBar/API.uvue +++ b/pages/tabBar/API.uvue @@ -248,7 +248,11 @@ { name: '电量', url: 'get-battery-info', - }, + }, + { + name: '安装Apk', + url: 'install-apk' + } /* { name: "打电话", url: "make-phone-call", diff --git a/static/test-apk/test.apk b/static/test-apk/test.apk new file mode 100644 index 0000000000000000000000000000000000000000..19c5e6c121de52104c6349f81a05f7c8c5fd4f91 Binary files /dev/null and b/static/test-apk/test.apk differ diff --git a/uni_modules/uni-installApk/changelog.md b/uni_modules/uni-installApk/changelog.md new file mode 100644 index 0000000000000000000000000000000000000000..d499b3c6feb8d532491c70023605bdd386e23e01 --- /dev/null +++ b/uni_modules/uni-installApk/changelog.md @@ -0,0 +1,6 @@ +## 1.0.2(2023-10-27) +修改文档 +## 1.0.1(2023-10-27) +支持js层调用 +## 1.0.0(2023-10-26) +安装apk的插件 diff --git a/uni_modules/uni-installApk/package.json b/uni_modules/uni-installApk/package.json new file mode 100644 index 0000000000000000000000000000000000000000..70bb882114e9c740743274b6aabe0c5a6944410d --- /dev/null +++ b/uni_modules/uni-installApk/package.json @@ -0,0 +1,93 @@ +{ + "id": "uni-installApk", + "displayName": "uni-installApk", + "version": "1.0.2", + "description": "uni-installApk", + "keywords": [ + "uni-installApk" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.94" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "android.permission.REQUEST_INSTALL_PACKAGES" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "uni-ext-api": { + "uni": { + "installApk": { + "name": "installApk", + "app": { + "js": true, + "kotlin": true, + "swift": false + } + } + } + }, + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-android": "y", + "app-ios": "n" + }, + "H5-mobile": { + "Safari": "n", + "Android Browser": "n", + "微信浏览器(Android)": "n", + "QQ浏览器(Android)": "n" + }, + "H5-pc": { + "Chrome": "n", + "IE": "n", + "Edge": "n", + "Firefox": "n", + "Safari": "n" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-installApk/readme.md b/uni_modules/uni-installApk/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..898834d79b542157a264adc6401bce2076c7768e --- /dev/null +++ b/uni_modules/uni-installApk/readme.md @@ -0,0 +1,37 @@ +# uni-installApk + +## 使用说明 + +Android平台安装Apk + +**注意: 3.95以下需要自定义基座** + +### uni.installApk(options : InstallApkOptions):void + +安装apk + +参数说明 + +``` +type InstallApkOptions = { + /** + * apk文件地址 + */ + filePath : string, + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success ?: (res : any) => void, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail ?: (err : any) => void, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete ?: (res : any) => void, +} +``` \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml b/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cf3ce22599398429807a3305a5a549277079dc2 --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/app-android/index.uts b/uni_modules/uni-installApk/utssdk/app-android/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..4e2c22b95e58c7b3da2e7ea1b18d7dcbcc61f70a --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/app-android/index.uts @@ -0,0 +1,38 @@ +import { InstallApkOptions, InstallApkSuccess } from "../interface.uts" +import Intent from 'android.content.Intent'; +import Build from 'android.os.Build'; +import File from 'java.io.File'; +import FileProvider from 'androidx.core.content.FileProvider'; +import Context from 'android.content.Context'; +import Uri from 'android.net.Uri'; + +export function installApk(options : InstallApkOptions) : void { + const context = UTSAndroid.getAppContext() as Context + const filePath = UTSAndroid.convert2AbsFullPath(options.filePath) + const apkFile = new File(filePath) + if (!apkFile.exists() && !apkFile.isFile()) { + let error = new UniError("uni-installApk", -1, "filePath is illegal"); + options.fail?.(error) + options.complete?.(error) + return + } + const intent = new Intent() + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.setAction(Intent.ACTION_VIEW) + + if (Build.VERSION.SDK_INT >= 24) { + const authority = context.getPackageName() + ".dc.fileprovider" + const apkUri = FileProvider.getUriForFile(context, authority, apkFile) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); + } else { + intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); + } + + context.startActivity(intent) + const success : InstallApkSuccess = { + errMsg: "success" + } + options.success?.(success) + options.complete?.(success) +} \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/app-ios/index.uts b/uni_modules/uni-installApk/utssdk/app-ios/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/uni_modules/uni-installApk/utssdk/interface.uts b/uni_modules/uni-installApk/utssdk/interface.uts new file mode 100644 index 0000000000000000000000000000000000000000..e377fb77286a01f13e640343a9a31c0751666805 --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/interface.uts @@ -0,0 +1,65 @@ +export interface Uni { + /** + * installApk() + * @description + * 安装apk + * @param {InstallApkOptions} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.94+", + * "unixVer": "3.94+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.installApk({ + filePath: "/xx/xx/xx.apk", + complete: (res: any) => { + console.log("complete => " + JSON.stringify(res)); + } + }); + ``` + */ + installApk(options : InstallApkOptions) : void +} +export type InstallApkSuccess = { + /** + * 安装成功消息 + */ + errMsg : string +} +export type InstallApkComplete = any +export type InstallApkSuccessCallback = (res : InstallApkSuccess) => void +export type InstallApkFailCallback = (err : UniError) => void +export type InstallApkCompleteCallback = (res : InstallApkComplete) => void + +export type InstallApkOptions = { + /** + * apk文件地址 + */ + filePath : string, + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success ?: InstallApkSuccessCallback | null, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail ?: InstallApkFailCallback | null, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete ?: InstallApkCompleteCallback | null +} \ No newline at end of file