2012-06-18 39 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我想加你的臉書(伊恩·布萊克伍德) 我想關於內部存儲器路徑的位置作一些澄清 –

相關問題