将文件放在 Xamarin 目标 Android API 29 中可以附加到电子邮件的某个地方

Put file somewhere it can be attached to an email in Xamarin targeting Android API 29

我支持一个用 Xamarin 编写的 Android 应用程序,它具有用户可以通过电子邮件将日志和 SQLite 数据库文件发送到支持电子邮件地址的功能。它通过压缩文件然后将 ZIP 复制到 public 下载文件夹,然后将它们附加到电子邮件来实现。 它使用下载文件夹,以便其他应用程序有权访问这些文件,如果我使用 USB 数据线连接到我的电脑,我可以看到它们。

到目前为止,这一直运行良好 - 要将更新部署到 Play 商店,我现在必须定位 API 29,这不再有效。将 ZIP 文件移动到下载文件夹的功能失败。

我使用以下方法获取下载文件夹中新文件的路径:

var path = Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath, filepath);

尽管 VS 将此方法显示为 已过时:“已弃用”

当我尝试将 ZIP 文件移动到它时,我得到

System.UnauthorizedAccessException: 访问路径“/storage/emulated/0/Download/logs.zip”被拒绝。

我已添加

android:requestLegacyExternalStorage="true"

我的清单,这根本没有任何区别。

如果我切换回目标 API 28,一切正常。

有什么地方可以放置文件以允许用户的默认电子邮件应用程序将其作为附件阅读?

如果您请求了读写运行时权限。检查建议是下面的link。 Android 9.+ API 29: /storage/emulated/0/Pictures/myPic.png open failed: EACCES (Permission Denied)

并使用下面的代码替换已弃用的方法。

var path = Path.Combine(GetExternalFilesDir(Android.OS.Environment.DirectoryDownloads).AbsolutePath, filepath);