繁体   English   中英

使用 Android PackageInstaller 时如何获取状态?

[英]How to get status when using Android PackageInstaller?

编辑:我为 API 29 级或更高级别添加了解决方案。 但是,这并不能解决我的问题。

如果有人想出 API 28 级或之前的方法,我将不胜感激。

原始问题:

我正在使用以下代码安装 apk:

final int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
OutputStream out = session.openWrite("COSU", 0, -1);
FileInputStream in = new FileInputStream(apkPath);
byte[] buffer = new byte[4*1024];
int c;
while ((c = in.read(buffer)) != -1) {
    out.write(buffer, 0, c);
}
session.fsync(out);
in.close();
out.close();

packageInstaller.registerSessionCallback(new PackageInstaller.SessionCallback() {
    @Override
    public void onCreated(int sessionid) {
        Log.i(TAG, "onCreated: installer created");
    }

    // ... other handlers

    @Override
    public void onFinished(int sessionid, boolean success) {
        if(sessionid != sessionId)
            return;

        if(success)
        {
            Log.i(TAG, "onFinished: installation successfull");
        }
        else
        {
            Log.i(TAG, "onFinished: installation failed");
        }
    }
});

session.commit(PendingIntent.getBroadcast( common.appContext, sessionId,
        new Intent("android.intent.action.MAIN"), 0).getIntentSender());

它按我的预期工作。 但是,我想知道它失败的原因。

onFinished 处理程序上的“成功”参数只是一个 boolean 并没有太多说明。 阅读文档,我知道有一些状态码可用于此目的(如 STATUS_FAILURE_STORAGE、STATUS_FAILURE_INCOMPATIBLE ...),但我找不到说明如何在失败时获取状态码的文档或示例。

注意:这在没有 UI 的情况下工作,因此我不能使用使用可见活动的示例。

对于 api 级别 29,添加了getStagedSessionErrorCode()getStagedSessionErrorMessage()函数。 因此,您可以执行以下操作:

Log.e(TAG, packageInstaller.getSessionInfo(installerSessionId).getStagedSessionErrorMessage());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM