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

Android小米设备使用FileProvider分享Zip日志文件时出现权限拒绝问题求助

Android小米设备使用FileProvider分享Zip日志文件时出现权限拒绝问题求助

各位同行们好,最近做项目遇到个奇怪的权限问题,折腾好久没搞定,想请教下大家:

我的Android应用会按日期生成日志文件(比如20.06.2024.txt),还做了个功能能把这些日志打包成Zip文件,然后通过应用分享或者直接用邮件发送。测试了6台不同品牌的设备,其他设备都能正常把Zip附件加到邮件里,唯独一台Xiaomi设备不行,查看日志发现报错:

Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://com.own.vpn.provider/files/logs/VPN_logs.zip from pid=6231, uid=1000 requires the provider to be exported , or grantUriPermission()

我在Manifest里定义的FileProvider代码如下(部分内容截断了):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="LockedOrientationA...

有没有大佬遇到过小米设备上这种FileProvider的权限问题?应该怎么解决这个权限拒绝的错误呢?

我自己尝试过的思路(供参考):

  • 确认了FileProvider的android:exported是设为false的,知道不能改成true,那样有安全风险;
  • 已经给Intent加了Intent.FLAG_GRANT_READ_URI_PERMISSION标记,但还是不行;

可能的解决方向:

  • 显式给目标应用授权Uri权限:小米的系统邮件应用可能需要更明确的授权,除了给Intent加标记,还可以显式调用grantUriPermission指定应用包名,比如:

    Uri zipUri = FileProvider.getUriForFile(context, "com.own.vpn.provider", zipFile);
    Intent emailIntent = new Intent(Intent.ACTION_SEND);
    emailIntent.setType("application/zip");
    emailIntent.putExtra(Intent.EXTRA_STREAM, zipUri);
    // 添加全局读取权限标记
    emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    // 显式给小米自带邮件应用授权(包名可能是com.android.email或者com.miui.email,需要确认)
    context.grantUriPermission("com.miui.email", zipUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
    // 用Chooser启动,避免直接指定应用的问题
    context.startActivity(Intent.createChooser(emailIntent, "分享日志"));
    
  • 检查FileProvider的路径配置:确保res/xml/file_paths.xml里的路径和生成Zip文件的实际路径一致,比如如果日志存在files/logs/目录下,file_paths.xml应该配置:

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <files-path name="logs" path="logs/"/>
    </paths>
    
  • 适配小米系统的权限机制:有些小米设备的隐私保护设置可能会限制应用间的文件访问,可以引导用户检查应用的“文件管理”权限是否开启,或者在代码中动态申请相关权限(虽然FileProvider不需要WRITE_EXTERNAL_STORAGE,但有些系统可能需要)。

备注:内容来源于stack exchange,提问作者Sunbey13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:04:41