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