1,需要赋予临时权限的,获取uri的方式,和普通的file方式地址不相同
//apk 的uri和其他的不同 public static Uri getApkUriFromFile(Context context, File file) { Uri uri = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { String authority = getPackageName(context) + ".fileProvider"; uri = FileProvider.getUriForFile(context, authority, file); } else { uri = Uri.fromFile(file); } return uri; } 获得的uri content://包名.fileProvider/external_files/..
private static Uri getFileUri(File apkFile) { //如果没有设置 SDCard 写权限,或者没有 SDCard,apk 文件保存在内存中,需要授予权限才能安装 try { String[] command = {"chmod", "777", apkFile.toString()}; ProcessBuilder builder = new ProcessBuilder(command); builder.start(); } catch (IOException ignored) { } Uri uri = Uri.fromFile(apkFile); return uri; }
获得的uri
file://包名.fileProvider/storage/..