2011-02-01 208 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