首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Android PackageInstaller时获取状态?

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

Stack Overflow用户
提问于 2019-10-15 18:47:48
回答 1查看 891关注 0票数 3

编辑:我为API级别29或更高版本添加了一个解决方案。然而,这并不能解决我的问题。

如果有人想出一个API级别28或更早的方法,我将不胜感激。

原问题:

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

代码语言:javascript
复制
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处理程序上的“‘success”参数只是一个布尔值,并不能说明太多问题。阅读documentation时,我了解到有一些状态代码可以用于此目的(如STATUS_FAILURE_STORAGE、STATUS_FAILURE_INCOMPATIBLE等),但我找不到一个文档或示例来说明在失败时如何获取状态代码。

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

EN

回答 1

Stack Overflow用户

发布于 2020-12-02 16:38:49

对于api级别29,添加了getStagedSessionErrorCode()getStagedSessionErrorMessage()函数。所以你可以这样做:

代码语言:javascript
复制
Log.e(TAG, packageInstaller.getSessionInfo(installerSessionId).getStagedSessionErrorMessage());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58392880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档