![](/img/trans.png)
[英]android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=PendingIntent{ }
[英]android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://
我为我的应用程序执行更新操作。 .apk文件夹下载WebService,我手动尝试运行,但下载后的程序上无法启动.apk文件夹。我收到错误的设备,尝试将其安装为“程序安装已停止”,我该如何解决?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(updateManager.updateContext, BuildConfig.APPLICATION_ID + ".provider",
new File(Environment.getExternalStorageDirectory() + "/download/" + updateManager.apkOutPath));
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(apkUri);
intent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
updateManager.updateContext.startActivity(intent);
} else {
try {
String PATH = Environment.getExternalStorageDirectory() + "/download/";
File toInstall = new File(PATH,updateManager.apkOutPath );
Uri apkUri = Uri.fromFile(toInstall);
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(apkUri,
"application/vnd.android.package-archive");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateManager.updateContext.startActivity(install);
catch (Exception e){
e.printStackTrace();
}
}
在Android 7.0之前,您必须使用file
Uri
(例如来自Uri.fromFile()
的file
Uri.fromFile()
和ACTION_VIEW
或ACTION_INSTALL_PACKAGE
来请求安装APK。
这不是您问题的答案,但为防止发生此崩溃,您可以检查是否有任何应用程序可以创建intent
如果未为Intent
创建选择器):
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
startActivity(Intent.createChooser(intent,"Chooser"));
}
根据我的测试,无法在所有手机上使用ACTION_VIEW
。 有些手机会引发android.content.ActivityNotFoundException
异常
到目前为止,使用ACTION_INSTALL_PACKAGE
可以在我测试过的手机上可靠地工作。
我如何管理下载
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
outputFile = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "ABC.apk")
} else {
outputFile = File(filesDir, "ABC.apk")
}
并且在安装时
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
val installIntent = Intent(Intent.ACTION_INSTALL_PACKAGE)
Timber.e(intent.getStringExtra("uri"))
val apkFile = File(filesDir, "ABC.apk")
val apkURI = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider",
apkFile )
installIntent.setDataAndType(apkURI, "application/vnd.android.package-archive")
installIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
installIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
startActivity(installIntent)
} else {
val installIntent = Intent(Intent.ACTION_VIEW)
installIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
Timber.e(intent.getStringExtra("uri"))
installIntent.setDataAndType(Uri.parse(intent.getStringExtra("uri")),
"application/vnd.android.package-archive")
}
在provider_paths.xml中
<?xml version="1.0" encoding="utf-8"?> <paths> <files-path name="file_paths" path="."/> </paths>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.