0

我一直在尝试为我的 Android 应用程序实施升级计划,该计划不会在 Android 市场上发布。

设计的应用程序工作流程如下:

  1. 登录时验证用户并启动主菜单活动。
  2. 从主菜单活动向我的网站发送一个请求以获取最新版本代码值(存储在服务器上的 SQL 数据库中)。
  3. 返回的版本代码值将与设备上安装的 apk 的版本代码值进行比较。
  4. 如果返回的版本代码值不同,则下载并安装位于服务器上的新 apk 文件。

确保在升级工作流程生效之前已完成以下任务也很重要。

  1. 必须编译新版本的 apk 以使用更新的 versionCode 值发布
  2. 必须更新存储在网站数据库中的 versionCode 值
  3. 新编译的apk文件必须上传到web服务器的正确位置

我已经实现了工作流程的前 3 个阶段,但是当我尝试实现第 4 部分时,我最终得到了“解析错误:解析包时出现问题”错误。

下面是有问题的代码:

protected void upgradeApplication() {
    StringBuilder urlBuilder = new StringBuilder(getString(R.string.website_ip) + "/" + getString(R.string.application_middleware) + "/" + getString(R.string.apk_folder) + "/"); 

    File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

    startActivity(intent);
}

我已经通过设备 Web 浏览器直接下载 apk 并从下载文件夹安装它来测试 apk 是否可以正确安装。但是当我尝试从应用程序中安装时,我得到了发布的错误。

“解析错误:解析包有问题”

任何帮助,将不胜感激

4

2 回答 2

1

如果用这条线

File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

您试图通过将 url 作为参数传递来下载文件,那么它将无法正常工作。构造File函数无法下载文件。

您应该使用 AsyncTask下载 apk,等待它完成,然后只有您可以安装它。

于 2012-06-18T11:45:36.570 回答
1

如果您将 .apk 文件存储在私有内部存储中,则它需要Context.MODE_WORLD_READABLE许可。

下面的片段会帮助你。

String outFileName = path+"/<Application_Name>.apk";
OutputStream myOutput = openFileOutput("<Application_Name>.apk", Context.MODE_WORLD_READABLE);

然后安装它,

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path+"/<Application_Name>.apk")), "application/vnd.android.package-archive");
startActivity(intent);
于 2012-06-18T11:52:29.600 回答