Crash Android 7打开APK,操作视图不工作(软件包安装程序已停止)

Crash Android 7打开APK,操作视图不工作(软件包安装程序已停止),crash,apk,android-7.0-nougat,packageinstaller,Crash,Apk,Android 7.0 Nougat,Packageinstaller,我的应用程序具有自动更新功能,可以下载APK,然后使用Intent.ACTION\视图打开软件包安装程序 多达7个,它工作得很好(通过向Intent提供一个普通文件://) 在安卓7上,我不得不改用文件提供商。代码中唯一的区别是: Intent installIntent = new Intent(Intent.ACTION_VIEW); if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {

我的应用程序具有自动更新功能,可以下载APK,然后使用Intent.ACTION\视图打开软件包安装程序

多达7个,它工作得很好(通过向Intent提供一个普通文件://)

在安卓7上,我不得不改用文件提供商。代码中唯一的区别是:

Intent installIntent = new Intent(Intent.ACTION_VIEW);
          if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
            installIntent.setDataAndType(uri,
                manager.getMimeTypeForDownloadedFile(downloadId));
          } else {

            Uri apkUri = FileProvider.getUriForFile(AutoUpdate.this,
                BuildConfig.APPLICATION_ID, file);
              installIntent.setDataAndType(apkUri,manager.getMimeTypeForDownloadedFile(downloadId));
          }
          activity.startActivity(installIntent);
Intent installIntent=新的Intent(Intent.ACTION\u视图);

如果(android.os.Build.VERSION.SDK_INT尝试将读取uri权限添加到您的意图中:

installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
检查这个答案

试着像下面这样做,它帮助了我和它在Android N7.0中的工作

File toInstall = new File(appDirectory, appName + ".apk");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri apkUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", toInstall);
    Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
    intent.setData(apkUri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    activity.startActivity(intent);
} else {
    Uri apkUri = Uri.fromFile(toInstall);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    activity.startActivity(intent);
}

你能发布你的清单吗?我已经添加了它。请注意,这发生在模拟器上,也发生在real上handsets@Johny19嘿,我也有同样的问题…你是如何解决的…,请告诉我,我也有同样的问题。你找到解决方案了吗?非常感谢..应该是被认可的答案吗?很高兴听到它的帮助:)编码快乐
installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File toInstall = new File(appDirectory, appName + ".apk");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri apkUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", toInstall);
    Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
    intent.setData(apkUri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    activity.startActivity(intent);
} else {
    Uri apkUri = Uri.fromFile(toInstall);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    activity.startActivity(intent);
}