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

Xamarin Android应用在Android11(API30)下邮件附件无法加载问题求助

问题根因

你遇到的问题核心是Android 11对跨应用文件访问的权限限制收紧,你当前使用Uri.FromFile()生成的file://格式URI,第三方邮件应用没有权限直接读取,所以会提示无法附加文件,和你配置的包可见性规则无关。

修复步骤

1. 配置FileProvider

首先在AndroidManifest.xml的<application>节点下添加FileProvider声明:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="你的应用包名.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

注意把你的应用包名替换为你APP实际的包名(比如com.yourcompany.yourapp)。

提示:如果编译时找不到FileProvider类,请先通过NuGet安装Xamarin.AndroidX.Core依赖包。

2. 新增共享路径配置

在你的Xamarin Android项目的Resources/xml目录下(如果没有xml文件夹就新建一个),创建file_paths.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 对应你代码中用到的GetExternalFilesDir目录 -->
    <external-files-path name="external_app_files" path="." />
</paths>

这个配置的作用是向FileProvider声明,你允许共享应用专属外部存储目录下的所有文件。

3. 修改附件URI生成逻辑

把你代码中生成URI的部分替换为FileProvider的API,同时给Intent授予读取权限:

// 注释掉原来的file URI生成逻辑
// Android.Net.Uri uri = Android.Net.Uri.FromFile(file);
// 替换为FileProvider生成content URI
Android.Net.Uri uri = FileProvider.GetUriForFile(
    ysiCurrentActivity.Current.Activity,
    "你的应用包名.fileprovider", // 和Manifest里配置的authorities完全一致
    file
);
intent.SetType("message/rfc822");
intent.PutExtra(Intent.ExtraSubject, "Logs");
intent.PutExtra(Intent.ExtraStream, uri);
// 关键:给目标邮件应用授予URI的读取权限
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
ysiCurrentActivity.Current.Activity.StartActivity(Intent.CreateChooser(intent, "Send email"));

额外优化建议

你代码中用到的GetExternalFilesDir是应用专属的外部存储目录,从Android 4.4开始访问这个目录不需要申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,如果你没有其他需要访问公共存储的逻辑,可以直接去掉这两个权限的申请和校验逻辑,减少权限申请带来的用户困扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:24:02