uni-app plus.runtime.install第二次调用没有反应

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app plus.runtime.install第二次调用没有反应

开发环境 版本号 项目创建方式
HBuilderX 4.07 云端

示例代码:

downLoadComplete(tempFilePath) {  
    console.log(this.tempFilePath);  
    plus.runtime.install(this.tempFilePath, {  
            force: true  
        },  
        () => {  
            console.log("安装完成");  
        },  
        () => {  
            console.error("安装失败")  
        });  
}

操作步骤:

  • 先第一次调用正常安装,再次进入程序调用,程序不会弹出安装提示并且直接回调成功

预期结果:

  • 第二次应该与第一次一样弹出安装提示。并且不需要重启也能弹出安装提示,

实际结果:

  • 第二次调用直接回调成功

bug描述:

下载Apk包完成后调用downLoadComplete()函数进行安装,第一次调用时能够弹出更新提示窗口,确认更新会正常安装程序;第二次调用时无法弹出,但是会回调安装成功。重启手机后进去App调用downLoadComplete时会弹出安装提示;

downLoadComplete() {  
    this.buttonStatus = 3;  
    this.downLoadPercent = 0  
    this.downloadedSize = 0  
    this.packageFileSize = 0  
    downloadTask = null;  
    console.log(this.tempFilePath);  
    plus.runtime.install(this.tempFilePath, {  
            force: true  
        },  
        () => {  
            console.log("安装完成");  
            this.buttonStatus = 4;  
        },  
        () => {  
            console.error("安装失败")  
        });  
}

使用openFile的结果也一样,第一次调用能够正常安装,第二次调用就直接没有反应

plus.runtime.openFile(this.tempFilePath,{pname:'com.android.packageinstaller'},err=>{  
    console.log(err)  
});

2 回复

重装App也无法解决,必须重启手机


在 uni-app 中,plus.runtime.install 方法用于安装应用。如果你在第二次调用 plus.runtime.install 时没有反应,可能是由于以下几个原因:

1. 安装包已经被安装

  • 如果应用已经被安装,再次调用 plus.runtime.install 可能不会触发任何操作。你可以先检查应用是否已经安装,如果已经安装,则不需要再次调用。
plus.runtime.isApplicationExist({
    pname: 'com.example.app',
    action: 'scheme://'
}, function (exist) {
    if (exist) {
        console.log('应用已经安装');
    } else {
        plus.runtime.install('https://example.com/app.apk', {}, function () {
            console.log('安装成功');
        }, function (e) {
            console.log('安装失败:' + JSON.stringify(e));
        });
    }
});

2. 安装包路径或URL无效

  • 确保你提供的安装包路径或URL是有效的,并且可以被访问。如果路径或URL无效,plus.runtime.install 可能不会触发任何操作。

3. 权限问题

  • 在 Android 设备上,安装应用需要用户授予安装未知来源应用的权限。如果用户没有授予该权限,安装过程可能会失败或没有反应。你可以在调用 plus.runtime.install 之前检查并请求该权限。
plus.android.requestPermissions(['android.permission.REQUEST_INSTALL_PACKAGES'], function (result) {
    if (result.granted) {
        plus.runtime.install('https://example.com/app.apk', {}, function () {
            console.log('安装成功');
        }, function (e) {
            console.log('安装失败:' + JSON.stringify(e));
        });
    } else {
        console.log('用户拒绝授予安装权限');
    }
});

4. 安装回调函数未正确绑定

  • 确保你为 plus.runtime.install 提供了正确的成功和失败回调函数。如果回调函数未正确绑定,你可能无法观察到安装过程的结果。

5. 设备或系统限制

  • 某些设备或系统可能对安装应用有额外的限制,例如企业设备的管理策略或系统版本的限制。确保你的设备和系统支持通过 plus.runtime.install 安装应用。

6. 调试信息

  • 你可以通过 console.logalert 输出调试信息,检查代码执行到哪一步,以及是否有错误信息。

示例代码

plus.runtime.isApplicationExist({
    pname: 'com.example.app',
    action: 'scheme://'
}, function (exist) {
    if (exist) {
        console.log('应用已经安装');
    } else {
        plus.runtime.install('https://example.com/app.apk', {}, function () {
            console.log('安装成功');
        }, function (e) {
            console.log('安装失败:' + JSON.stringify(e));
        });
    }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!