2011-02-01 209 views
1

我想下面的代碼來安裝保存在SD卡上的apk文件,並得到以下異常:「android.content.ActivityNotFoundException:無法找到顯式活動類{com.android.packageinstaller/.PackageInstallerActivity} 」。在代碼中,file代表apk文件的SD卡路徑。安裝apk程序錯誤

Intent resultIntent = new Intent(android.content.Intent.ACTION_VIEW); 
resultIntent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive"); 
resultIntent.setClassName("com.android.packageinstaller", ".PackageInstallerActivity"); 
startActivity(resultIntent); 

請讓我知道如何管理這個。

感謝 賈韋德汗

+0

`file`是否有效? – dbm 2011-02-01 09:45:42

回答

4

你可能需要閱讀關於如何安裝和刪除使用PackageInstaller包this blog post

請注意,由於程序包安裝程序已註冊以處理MIME類型application/vnd.android.package-archive,因此您不必明確指定意圖類名;意向解析器應找到合適的解決方案。

此外,只有當用戶啓用INSTALL_NON_MARKET_APPS時,操作纔會成功。這與你所看到的失敗直接相關,但需要記住,因爲你可能會遇到這種情況。

0

嘗試添加Intent.FLAG_ACTIVITY_NEW_TASK像這樣:

Intent resultIntent = new Intent(); 
resultIntent.setAction(Intent.ACTION_VIEW); 
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
resultIntent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive"); 

然後調用

startActivity(resultIntent); 

注意!正如Franci Penov先前提到的有關INSTALL_NON_MARKET_APPS的條件仍然必須是有效的!

+0

對我的舊代碼進行快速回顧後,我注意到我用空構造函數創建了Intent,然後手動設置了Action。這現在反映在我的修改答案中。但是,我不知道這是否會產生任何影響。我再次嘗試我的代碼,它的工作原理。我不知道是否有任何「特殊情況」使我的解決方案發揮作用,或者你是否勇敢地嘗試失敗。 – dbm 2011-02-01 09:43:50