红米 Android 9 用原生裁剪 无法保存的问题

近来项目从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循环临时授权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值