应用程序升级期间的Android Parse Error

时间:2012-06-18 11:25:51

标签: android upgrade parse-error

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

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

  1. 用户在登录时进行验证,并启动主菜单活动。
  2. 请求从主菜单活动发送到我的网站 最新版本代码值(服务器上SQL数据库中的Stor)。
  3. 将返回的版本代码值与版本代码进行比较 设备上安装的apk的值。
  4. 如果返回的版本代码值不同,则新的apk文件位于 服务器已下载并安装。
  5. 在升级工作流程开始工作之前,确保完成以下任务也很重要。

    1. 必须使用更新的versionCode值
    2. 编译新版本的apk
    3. 必须更新存储在网站数据库中的versionCode值的值
    4. 必须将新编译的apk文件上传到Web服务器上的正确位置
    5. 我已经实现了工作流程的前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);
      }
      

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

      “解析错误:解析包”

      的问题

      任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

如果使用此行

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

你试图通过传递url作为参数来下载文件,然后它将无法工作。 File构造函数无法下载文件。

你应该use an AsyncTask下载apk,等待它完成之后只有你可以安装它。

答案 1 :(得分: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);