我正在尝试让我的应用程序自动安装 apk。这适用于 api<24。但是对于 24 来说,它失败了。Android 实现了额外的安全性:
对于面向 Android 7.0 的应用,Android 框架强制执行 StrictMode API 策略,该策略禁止在应用外部公开 file:// URI。如果包含文件 URI 的意图离开您的应用程序,则应用程序将失败并出现 FileUriExposedException 异常。
所以我尝试了这个:
Uri myuri;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
myuri = Uri.parse("file://"+outapk);
} else {
File o = new File(outapk);
myuri = FileProvider.getUriForFile(con, con.getApplicationContext().getPackageName() + ".provider", o);
}
Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(myuri,"application/vnd.android.package-archive");
con.startActivity(promptInstall);
但得到一个致命的例外:
com.android.packageinstaller "Caused by: java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{b42ee8a 6826:com.android.packageinstaller/u0a15} (pid=6826, uid=10015) that is not exported from uid 10066".
我的清单中有 export=true 。
问题似乎是 packageinstaller 不能使用 content:// uri。
有什么方法可以让应用程序使用 api24 以编程方式安装 apk?