You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

上传图片到Firebase Storage出现GalleryOpenProvider权限拒绝异常怎么办

报错具体含义

这个是小米MIUI系统特有的安全权限异常,触发原因是你的App尝试访问系统图库的内容提供器com.miui.gallery.provider.GalleryOpenProvider时,所持有的临时访问权限已经失效:
你通过系统选图器拿到图库图片的Uri时,系统只会给你的App授予短时、单次的读权限,如果没有即时读取Uri对应的文件内容,直接将原始Uri传给Firebase Storage的putFile方法执行上传操作时,临时权限已经过期,而小米的图库提供器本身不对外开放,就会触发该权限拒绝错误,无法读取图片内容完成上传。

对应处理方案
  • 方案1(兼容性最高,推荐):将选中的图片先复制到App私有目录再上传
    拿到图库返回的Uri后,立刻通过ContentResolver读取Uri的输入流,将文件写入App自身的缓存目录/文件目录,再用私有目录下的本地文件生成Uri传给Firebase的putFile方法上传,完全规避系统权限限制,适配所有Android厂商系统。
  • 方案2:申请Uri持久化访问权限
    在选图成功的回调中立刻调用以下代码,申请对该Uri的长期访问权限,后续上传时即可正常访问内容:
    // 仅针对Android 4.4及以上系统生效
    int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    getContentResolver().takePersistableUriPermission(selectedImageUri, takeFlags);
    
  • 方案3:改用输入流方式上传
    拿到Uri后立刻读取输入流,调用Firebase的putStream方法直接上传流,无需后续再访问原始Uri,避开权限过期问题:
    InputStream inputStream = getContentResolver().openInputStream(selectedImageUri);
    storageReference.putStream(inputStream);
    

内容的提问来源于stack exchange,提问作者Micheal_ Moris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:03:04