以编程方式安装APK - 返回值

时间:2011-05-27 20:50:37

标签: android

在我的应用中,我从我的活动中调用了一个javascript界面​​。在与此界面相关联的webview中,我要求用户下载并安装APK。我正在使用“startActivityForResult”来启动安装过程(下载文件后)。这是代码:

Intent promptInstall = new Intent(Intent.ACTION_VIEW);
        promptInstall.setDataAndType(Uri.fromFile(new File(PATH + "app.apk")), "application/vnd.android.package-archive");
        startActivityForResult(promptInstall, ACCEPT_INSTALL);

我在主活动类中使用“onActivityResult”来捕获上述活动的返回值。这是代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("requestCode, resultCode from Install APK: ", Integer.toString(requestCode) + ", " + Integer.toString(resultCode));   
}

我面临的问题是“resultCode”总是返回0,无论用户是选择安装应用程序还是不安装应用程序。我真的需要知道用户是否安装了应用程序。关于为什么返回值始终为0的任何想法?

我的最后一招是使用packagemanager检查onActivityResult函数中是否存在应用程序,以确定应用程序是否已安装,但我想知道为什么返回值始终为0.

非常感谢......

2 个答案:

答案 0 :(得分:3)

我们开发了一个应用程序市场并面临同样的问题。我们的解决方案是按照您的建议使用数据包管理器。

我查看了一些intent-filters,因为在安装过程中似乎有一些意图。但是我们无法让它运行起来。数据包管理器解决方案可以正常工作,因为您可以检查应用程序版本,这对应用程序更新非常重要。

答案 1 :(得分:3)

您可以查看 firstInstallTime / lastUpdateTime ,并将您的请求时间与PackageInstaller的安装包进行比较,请参阅以下示例:

Collections.sort()

该解决方案并不漂亮,但遗憾的是PackageInstaller并未向我们提供明确的结果代码。