【问题标题】:android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://android.content.ActivityNotFoundException:未找到处理 Intent { act=android.intent.action.VIEW dat=content:// 的活动
【发布时间】:2018-01-15 12:03:29
【问题描述】:

我为我的应用实施更新操作。 .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 android-intent android-fileprovider


    【解决方案1】:

    在 Android 7.0 之前,您必须使用 file Uri,例如来自 Uri.fromFile(),以及 ACTION_VIEWACTION_INSTALL_PACKAGE 来请求安装 APK。

    【讨论】:

    • 我试过了,但没有任何改变。文件下载正确,但之后尝试安装时出现错误。同名旧应用程序是否可能。在设备上?
    • @JohnConnor:如果您进行了此更改,您的错误消息将不会是android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://,因为Uri 方案不会是content
    • 是的,我没有收到此异常,我应该编辑我的答案,但更新后下载的 .apk 文件仍然无法正常工作。我尝试手动操作。
    【解决方案2】:

    这不是您问题的答案,但为了防止发生这种崩溃,您可以检查是否有任何应用程序可以处理 intent 如果没有为 Intent 创建选择器:

    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    } else {
        startActivity(Intent.createChooser(intent,"Chooser"));
    }
    

    【讨论】:

      【解决方案3】:

      根据我的测试,使用ACTION_VIEW 不适用于所有手机。部分手机会抛出异常android.content.ActivityNotFoundException

      而使用ACTION_INSTALL_PACKAGE 已经在我迄今为止测试过的手机上可靠地工作。

      【讨论】:

        【解决方案4】:

        我是如何管理下载的

        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>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-06
          • 1970-01-01
          • 1970-01-01
          • 2018-09-28
          • 1970-01-01
          • 2015-03-08
          • 1970-01-01
          相关资源
          最近更新 更多