近来项目从Target版本26到28碰见了用原生裁剪无法保存的问题,具体报的错误如下:
java.lang.SecurityException: Permission Denial: writing androidx.core.content.FileProvider uri content://路径 from pid=17437, uid=10057 requires the provider be exported, or grantUriPermission()
看着像是Uri的问题,但是26已经配置了Fileprovider了,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(this, getPackageName() + ".FileProvider", file);
} else {
uri = Uri.fromFile(file)
}
为什么还会出现这个问题呢.然后百度google了一大通,说是临时权限的问题,
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
但是我添加以后还是那个问题不起作用,又有人说调用这个方法
grantUriPermission(getPackageName(), uriFromFile,Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
还是无法起作用,后来在小米论坛还是哪儿看到这个解决方法:
List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
this.grantUriPermission(packageName, uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
起作用了..所以解决方法
1.target版本退回26
2.for循环临时授权