2012-06-18 41 views
0

我一直在尝试为Android应用程序实施升级计划,该计划不会在Android市场上发布。在应用程序升级过程中发生Android解析错误

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

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

在升级工作流程起作用之前,确保完成以下任务也很重要。

  1. 的apk文件的新版本必须编译烧焦发布了一个更新的versionCode值
  2. 存储在网站数据库中的versionCode值的值必须更新
  3. 新编译的apk文件必须是上传到网络服务器上的正确位置

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

下面是有问题的代码:

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安装正确。但是当我尝试从应用程序中安装时,我得到了发布的错误。

“解析错误:有aproblem解析包”

任何帮助,将不胜感激

+0

你将它存储在getFileDir? –

+0

你的意思是储存apk?我已经被迫使用仅作为我不能肯定该用户将获得一个SD卡安装 –

+0

此外,我认为下面的代码行会拉从网站上的文件内部存储器中的应用。 'File file = new File(urlBuilder.toString(),getString(R.string.apk_file));' 其中urlBuilder包含指向apk文件的链接 –

回答

1

如果这条线

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

你试图通过将下载的文件url作为参数,那么它将无法工作。 File构造函数不能下载文件。

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

+0

干杯Dalmas里面的代码可能我去过的地方去错 –

+0

嗨Dalmas我已经实现了异步任务,如图您提供的链接,一切似乎那正常工作,但我仍然在最后得到解析错误。 看在日志文件中,我得到了以下错误:无法打开拉链“/data/data/uk.estrix.android.m3sms/files/Mobile M3短信销售自动化”:权限被拒绝。如果需要,我可以发布整个日志文件。 –

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); 
+0

嗨VIPUL我想加你的脸书(伊恩·布莱克伍德) 我想关于内部存储器路径的位置作一些澄清 –

相关问题