提交 3b1c15d7 编写于 作者: taohebin@dcloud.io's avatar taohebin@dcloud.io

feat: uni-installApk

上级 21aa9c23
...@@ -20,47 +20,53 @@ ...@@ -20,47 +20,53 @@
<button @tap="testonMemoryWarning">开启内存不足告警监听</button> <button @tap="testonMemoryWarning">开启内存不足告警监听</button>
<button @tap="testoffMemoryWarning">关闭内存不足告警监听</button> <button @tap="testoffMemoryWarning">关闭内存不足告警监听</button>
<button @tap="getLocationTest" style="width: 100%;">获取定位</button> <button @tap="getLocationTest" style="width: 100%;">获取定位</button>
<button type="default" @click="handleInstallApk">安装apk</button>
</view> </view>
</template> </template>
<script> <script>
import {
installApk
} from "@/uni_modules/uni-installApk"
export default { export default {
data() { data() {
return { return {
memListener:null, memListener: null,
setUserCaptureScreenFlag: false, setUserCaptureScreenFlag: false,
setUserCaptureScreenText: '禁止截屏', setUserCaptureScreenText: '禁止截屏',
permissionGranted: false, permissionGranted: false,
id:0 id: 0
} }
}, },
onLoad() { onLoad() {
}, },
methods: { methods: {
onMemoryWarning:function(res){ onMemoryWarning: function(res) {
console.log(res); console.log(res);
}, },
fn:function(res){ fn: function(res) {
console.log(res) console.log(res)
}, },
getLocationTest() { getLocationTest() {
console.log(" ------- getLocationTest: "); console.log(" ------- getLocationTest: ");
uni.getLocation({ uni.getLocation({
type: 'gcj02 ', type: 'gcj02 ',
success (res) { success(res) {
console.log(" success ",res); console.log(" success ", res);
},fail (res) { },
console.log(" fail ",res); fail(res) {
console.log(" fail ", res);
} }
}) })
}, },
onGetWifiList2_assert0() { onGetWifiList2_assert0() {
console.log(" ------- onGetWifiList2_assert0: ",this.id); console.log(" ------- onGetWifiList2_assert0: ", this.id);
const fn = res => console.log('onGetWifiList res', res) const fn = res => console.log('onGetWifiList res', res)
uni.startWifi({success(){ uni.startWifi({
success() {
uni.onGetWifiList(fn) uni.onGetWifiList(fn)
uni.getWifiList({ uni.getWifiList({
success() { success() {
...@@ -69,19 +75,20 @@ ...@@ -69,19 +75,20 @@
uni.stopWifi({ uni.stopWifi({
success() {}, success() {},
fail(e) { fail(e) {
console.log("stopWifi fail: ",e); console.log("stopWifi fail: ", e);
}
})
} }
}) })
} }
}) })
}})
this.id++ this.id++
}, },
testConnnectWifi(){ testConnnectWifi() {
uni.startWifi({ uni.startWifi({
success:(res)=> { success: (res) => {
console.log("success: " + JSON.stringify(res)); console.log("success: " + JSON.stringify(res));
// uni.connectWifi({ // uni.connectWifi({
// maunal:false, // maunal:false,
...@@ -91,9 +98,11 @@ ...@@ -91,9 +98,11 @@
// console.log(res); // console.log(res);
// } // }
// }); // });
},fail:(res)=>{ },
fail: (res) => {
console.log("fail: " + JSON.stringify(res)); console.log("fail: " + JSON.stringify(res));
},complete:(res)=>{ },
complete: (res) => {
console.log("complete: " + JSON.stringify(res)); console.log("complete: " + JSON.stringify(res));
} }
}) })
...@@ -101,47 +110,49 @@ ...@@ -101,47 +110,49 @@
}, },
testGetConnnectWifi(){ testGetConnnectWifi() {
uni.getConnectedWifi({ uni.getConnectedWifi({
partialInfo:false, partialInfo: false,
complete:(res)=>{ complete: (res) => {
console.log(res); console.log(res);
if (res.errCode == 0) { if (res.errCode == 0) {
uni.showToast({ uni.showToast({
icon:'none', icon: 'none',
title:res.wifi.SSID title: res.wifi.SSID
}) })
} else{ } else {
uni.showToast({ uni.showToast({
icon:'none', icon: 'none',
title:res.errMsg title: res.errMsg
}) })
} }
} }
}); });
}, },
testStartWifi(){ testStartWifi() {
uni.startWifi({ uni.startWifi({
success:(res)=> { success: (res) => {
console.log("success: " + JSON.stringify(res)); console.log("success: " + JSON.stringify(res));
// wifi 开启成功后,注册wifi链接状态监听和wifi列表获取监听 // wifi 开启成功后,注册wifi链接状态监听和wifi列表获取监听
uni.onGetWifiList(function(res){ uni.onGetWifiList(function(res) {
console.log("onGetWifiList"); console.log("onGetWifiList");
console.log(res); console.log(res);
}); });
uni.onWifiConnected(function(res){ uni.onWifiConnected(function(res) {
console.log("onWifiConnected"); console.log("onWifiConnected");
console.log(res); console.log(res);
}); });
uni.onWifiConnectedWithPartialInfo(function(res){ uni.onWifiConnectedWithPartialInfo(function(res) {
console.log("onWifiConnectedWithPartialInfo"); console.log("onWifiConnectedWithPartialInfo");
console.log(res); console.log(res);
}); });
},fail:(res)=>{ },
fail: (res) => {
console.log("fail: " + JSON.stringify(res)); console.log("fail: " + JSON.stringify(res));
},complete:(res)=>{ },
complete: (res) => {
console.log("complete: " + JSON.stringify(res)); console.log("complete: " + JSON.stringify(res));
} }
}) })
...@@ -151,11 +162,13 @@ ...@@ -151,11 +162,13 @@
uni.offWifiConnectedWithPartialInfo() uni.offWifiConnectedWithPartialInfo()
uni.stopWifi({ uni.stopWifi({
success:(res)=> { success: (res) => {
console.log("success: " + JSON.stringify(res)); console.log("success: " + JSON.stringify(res));
},fail:(res)=>{ },
fail: (res) => {
console.log("fail: " + JSON.stringify(res)); console.log("fail: " + JSON.stringify(res));
},complete:(res)=>{ },
complete: (res) => {
console.log("complete: " + JSON.stringify(res)); console.log("complete: " + JSON.stringify(res));
} }
}) })
...@@ -163,18 +176,20 @@ ...@@ -163,18 +176,20 @@
}, },
testGetWifiList() { testGetWifiList() {
uni.getWifiList({ uni.getWifiList({
success:(res)=> { success: (res) => {
console.log("success: " + JSON.stringify(res)); console.log("success: " + JSON.stringify(res));
},fail:(res)=>{ },
fail: (res) => {
console.log("fail: " + JSON.stringify(res)); console.log("fail: " + JSON.stringify(res));
},complete:(res)=>{ },
complete: (res) => {
console.log("complete: " + JSON.stringify(res)); console.log("complete: " + JSON.stringify(res));
} }
}) })
}, },
testOffGetWifiList(){ testOffGetWifiList() {
uni.offGetWifiList() uni.offGetWifiList()
}, },
...@@ -183,15 +198,15 @@ ...@@ -183,15 +198,15 @@
testonMemoryWarning() { testonMemoryWarning() {
uni.onMemoryWarning(this.onMemoryWarning) uni.onMemoryWarning(this.onMemoryWarning)
uni.showToast({ uni.showToast({
icon:'none', icon: 'none',
title:'已监听,注意控制台输出' title: '已监听,注意控制台输出'
}) })
}, },
testoffMemoryWarning(){ testoffMemoryWarning() {
uni.offMemoryWarning(this.onMemoryWarning) uni.offMemoryWarning(this.onMemoryWarning)
uni.showToast({ uni.showToast({
icon:'none', icon: 'none',
title:'监听已移除' title: '监听已移除'
}) })
}, },
testScreenShotListen() { testScreenShotListen() {
...@@ -199,8 +214,8 @@ ...@@ -199,8 +214,8 @@
uni.onUserCaptureScreen(function(res) { uni.onUserCaptureScreen(function(res) {
console.log(res); console.log(res);
uni.showToast({ uni.showToast({
icon:"none", icon: "none",
title:'捕获截屏事件' title: '捕获截屏事件'
}) })
that.screenImage = res.path that.screenImage = res.path
}); });
...@@ -208,8 +223,8 @@ ...@@ -208,8 +223,8 @@
if (uni.getSystemInfoSync().platform != "android" || that.permissionGranted) { if (uni.getSystemInfoSync().platform != "android" || that.permissionGranted) {
// 除android 之外的平台,直接提示监听已开启 // 除android 之外的平台,直接提示监听已开启
uni.showToast({ uni.showToast({
icon:"none", icon: "none",
title:'截屏监听已开启' title: '截屏监听已开启'
}) })
} }
}, },
...@@ -219,8 +234,8 @@ ...@@ -219,8 +234,8 @@
}); });
// 提示已经开始监听,注意观察 // 提示已经开始监听,注意观察
uni.showToast({ uni.showToast({
icon:"none", icon: "none",
title:'截屏监听已关闭' title: '截屏监听已关闭'
}) })
}, },
testGetBatteryInfo() { testGetBatteryInfo() {
...@@ -245,17 +260,19 @@ ...@@ -245,17 +260,19 @@
uni.setUserCaptureScreen({ uni.setUserCaptureScreen({
enable: flag, enable: flag,
success: (res) => { success: (res) => {
console.log("setUserCaptureScreen enable: " + flag + " success: " + JSON.stringify(res)); console.log("setUserCaptureScreen enable: " + flag + " success: " + JSON.stringify(
res));
}, },
fail: (res) => { fail: (res) => {
console.log("setUserCaptureScreen enable: " + flag + " fail: " + JSON.stringify(res)); console.log("setUserCaptureScreen enable: " + flag + " fail: " + JSON.stringify(res));
}, },
complete: (res) => { complete: (res) => {
console.log("setUserCaptureScreen enable: " + flag + " complete: " + JSON.stringify(res)); console.log("setUserCaptureScreen enable: " + flag + " complete: " + JSON.stringify(
res));
} }
}); });
uni.showToast({ uni.showToast({
icon:"none", icon: "none",
title: this.setUserCaptureScreenText title: this.setUserCaptureScreenText
}); });
this.setUserCaptureScreenFlag = !this.setUserCaptureScreenFlag; this.setUserCaptureScreenFlag = !this.setUserCaptureScreenFlag;
...@@ -265,6 +282,15 @@ ...@@ -265,6 +282,15 @@
this.setUserCaptureScreenText = '禁止截屏'; this.setUserCaptureScreenText = '禁止截屏';
} }
}, },
handleInstallApk() {
installApk({
filePath: "/sdcard/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/ddd.apk",
// filePath:"/static/ddd.apk",
complete(res) {
console.log(res);
}
})
},
} }
} }
</script> </script>
......
{
"id": "uni-installApk",
"displayName": "uni-installApk",
"version": "1.0.0",
"description": "uni-installApk",
"keywords": [
"uni-installApk"
],
"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": {
"installApk": {
"name": "installApk",
"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
# uni-installApk
### 开发文档
[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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="io.dcloud.uni.installApk">
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
</manifest>
\ No newline at end of file
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 = {
message: "success"
}
options.success?.(success)
options.complete?.(success)
}
\ No newline at end of file
export interface Uni {
/**
* installApk()
* @description
* 安装apk
* @param {InstallApkOptions}
* @return {void}
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "4.4",
* "uniVer": "3.96+",
* "unixVer": "3.96+"
* },
* "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 = {
/**
* 安装成功消息
*/
message : 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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册