2011-11-03 255 views
1

我想在我的android應用程序中實現AUTOUPDATE功能,因爲它是一個未通過android市場發佈的自定義應用程序。到目前爲止,我有一切工作,但Android嘗試安裝應用程序,並說「應用程序未安裝」。我不知道它是否重要,但應用程序已經在設備上,所以它是一個更新。安裝APK程序

的應用程序從互聯網下載並存儲在SD卡中的APK文件。比我這樣做:

Uri packageURI = Uri.parse("package:my_package"); 
    Intent intent = new Intent(Intent.ACTION_VIEW, packageURI); 
    intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + ApkName)), 
      "application/vnd.android.package-archive"); 
    startActivity(intent); 

任何人都可以幫忙嗎?謝謝。

+0

的'Uri'要創建在第一線並投入了'Intent'第二行是由'Uri'你在第三線提供覆蓋。您可以簡單地刪除第一行並使用採用操作字符串的單參數「Intent」構造函數。另外,不要使用連接來創建路徑 - 使用'File'構造函數,將'File'和'String'作爲參數。 – CommonsWare

回答

2

這裏是一個片段我用,它看起來基本上是一樣的你我能看到的唯一區別是使用packageURI的。我不知道如果使用packageURI會導致它不起作用,但如果我是你,我會嘗試沒有。

File appFile = new File(ScreenSaverActivity.this.getFilesDir() + File.separator + APPLICATION_FILE_NAME); 
Intent installIntent = new Intent(Intent.ACTION_VIEW); 
installIntent.setDataAndType(Uri.fromFile(appFile),"application/vnd.android.package-archive"); 
startActivity(installIntent); 

但是通常當你看到「應用程序未安裝」的消息在嘗試安裝它意味着簽名用於簽署2 apk的是不同的,即一個是簽署解除鍵,一個是簽訂調試的關鍵。或者,如果這兩個apks是在不同的計算機上編譯的,你可以用兩個不同的調試密鑰進行簽名。

注意,即使你不通過你仍然需要產生和應用程序簽名的市場分佈。調試密鑰在1年後過期,一旦密鑰過期,您的應用將停止工作。

+0

請注意,只有在文件爲'MODE_WORLD_READABLE'時,您的代碼才能工作,因爲它位於內部存儲器上的應用程序本地位置('getFilesDir()')上。 – CommonsWare

+0

偉大的一點。我忘了提到這一點,當我執行這個時,它肯定給我適合。 – FoamyGuy

+0

是的,我想你知道它。 :-)但是我希望記錄中的其他人能夠通過這個答案。 – CommonsWare

0

1)檢查清單文件中指定的應用程序名稱是否和以前一樣。

2)我想你可能必須去匹配一些包的信息。特別是如果應用程序是從不同的機器構建的,簽名可能會有所不同(我對此並不是100%確定的)。 另外如果你使用Eclipse。在「運行配置」下檢查,檢查指定的包名是否與用於初始版本的包相同。