2010-04-14 75 views
15

我想知道是否可以通過程序觸發安裝卡上的apk安裝程序?apk的自動安裝

+4

你的意思是像病毒? – 2010-04-14 14:11:36

+0

不,我打算以這種方式更新我的應用程序。從我的網站下載新的apk,然後自動安裝它。 – rantravee 2010-04-14 14:25:24

+0

這是事情已經如何工作?如果用戶選中「安裝非市場應用程序」選項,他們只需瀏覽下載鏈接,並在下載成功後自動安裝應用程序? – Samuh 2010-04-14 14:44:53

回答

20
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent); 

(的anddev.org提供)

+0

有時它有效,有時會報告找不到AndroidManifest文件並取消安裝 – rantravee 2010-04-15 08:09:13

+0

這表明您可能在下載的APK完全刷新之前調用'startActivity()'閃光燈什麼的。我會嘗試一次實現這一步,首先在您手動放入SD卡的APK上使用'startActivity()'(例如,adb push,DDMS文件管理器,從開發機器上掛載/拖放/卸載)。一旦你按照你想要的方式工作,融入下載機制。 – CommonsWare 2010-04-15 10:57:27

+0

確實如此,我正在談論。然而,我觀察到,如果apk是在SD卡/下載它安裝,但如果放在SD卡,如果將產生此錯誤 04-15 16:51:02.686:錯誤/ filemap(215):mmap 0,0)失敗:無效的參數 04-15 16:51:02.686:WARN/zipro(215):無法映射'/sdcard/myapk.apk':無效的參數 04-15 16:51:02.695:DEBUG /資產(215):未能打開Zip存檔'/sdcard/myapk.apk' 04-15 16:51:02.695:DEBUG/filemap(215):munmap(0x0,0)失敗 即使路徑爲:INFO/mytag(196):instalation path是:///sdcard/myapk.apk – rantravee 2010-04-15 14:02:58

0

看看這是否有幫助:install Apk via Intent。不知道這是否是要走的路。

+0

你以前用過這個嗎?如果是的話請說明是什麼「包」,「xxx」 參考? Uri installUri = Uri.fromParts(「package」,「xxx」,null); – rantravee 2010-04-14 15:10:20

+0

@Samuh:過去的代碼網站已關閉 – 2012-01-11 10:03:19

4

萬一有人找這個信息.... 如果你要安裝的還編程下載並存儲在您的私人「文件」的APK文件夾(即「/data/data/com.yourapp.name/files」),您需要通過如下首先使用getFileStreamPath以獲取完整路徑的URI:

File fullPath = getFileStreamPath("name_of_downloaded_app.apk"); 

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(fullPath), "application/vnd.android.package-archive"); 
startActivity(intent); 

希望這有助於...