import {ref} from "vue" export function useVersionUpdate() { const progress = ref(0); let downloadTask = null; function checkInstallPermission() { // 获取主Activity对象 const mainActivity = plus.android.runtimeMainActivity(); // 获取PackageManager对象 const packageManager = mainActivity.getPackageManager(); // 正确方式:使用plus.android.invoke调用方法 const canRequest = plus.android.invoke(packageManager, "canRequestPackageInstalls"); if (canRequest) { console.log("应用有安装权限"); return true; } else { console.log("应用无安装权限,需要请求"); return false; } } function requestInstallPermission() { return new Promise((resolve) => { // 跳转到允许安装未知来源应用的设置界面 const Intent = plus.android.importClass("android.content.Intent"); const Settings = plus.android.importClass("android.provider.Settings"); const mainActivity = plus.android.runtimeMainActivity(); const intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); // 设置应用的包名 const uri = plus.android.invoke( plus.android.invoke("android.net.Uri", "parse", "package:" + plus.runtime.appid) ); intent.setData(uri); // 启动Activity并处理结果 mainActivity.startActivityForResult(intent, 1001); // 监听Activity结果(需要在App.vue的onActivityResult中全局监听) plus.globalEvent.addEventListener("onActivityResult", (result) => { if (result.requestCode === 1001) { // 再次检查权限状态 checkInstallPermission().then(hasPermission => { resolve(hasPermission); }); } }); }); } function downloadAndInstallApk(apkUrl) { return new Promise((resolve, reject) => { uni.showLoading({ title: '下载中...', mask: true }); uni.downloadFile({ url: apkUrl, success: (downloadResult) => { uni.hideLoading(); if (downloadResult.statusCode === 200) { const tempFilePath = downloadResult.tempFilePath; // 安装APK plus.runtime.install(tempFilePath, { force: true }, () => { uni.showToast({ title: '安装成功', icon: 'success' }); setTimeout(() => { plus.runtime.restart(); // 重启应用 }, 1500); resolve(); }, (err) => { console.error('安装失败: ', err); uni.showToast({ title: '安装失败', icon: 'none' }); reject(err); }); } }, fail: (error) => { uni.hideLoading(); console.error('下载失败: ', error); uni.showToast({ title: '下载失败', icon: 'none' }); reject(error); } }); }); } async function initDownload(url) { console.log('url下载', url) try { // 1. 检查安装权限 const hasPermission = await checkInstallPermission(); console.log('权限', hasPermission) if (!hasPermission) { // 2. 如果没有权限,请求权限 uni.showModal({ title: '权限申请', content: '需要您允许应用安装权限,以便完成版本更新。', confirmText: '去设置', success: async (res) => { if (res.confirm) { const permissionGranted = await requestInstallPermission(); if (permissionGranted) { // 3. 权限获取成功,开始下载安装 await downloadAndInstallApk(url); } else { uni.showToast({ title: '权限获取失败', icon: 'none' }); } } } }); } else { // 已经有权限,直接下载安装 await downloadAndInstallApk(url); } } catch (error) { console.error('更新流程出错: ', error); uni.showToast({ title: '更新失败', icon: 'none' }); } } return { requestInstallPermission, initDownload, progress } }