xamarin - 直接将文件写入Android.OS.Environment.ExternalStorageDirectory 可以吗?
问题描述
我一直在尝试移植一些较旧的代码,并找到了一种将流写入文件的方法,然后再将其作为电子邮件的附件发送。
该代码最终使用
var path = MediaStore.Images.Media.InsertImage(Forms.Context.ContentResolver, myBitmap, "My Bitmap", "MyBitmap.png");
保存文件。path
最终成为content://media/external/images/media/164
164 似乎只是第 n 个保存的地方。
最初该代码不起作用(只是因为权限,结果证明)所以我尝试用一些普通的 C# 替换它:
string dir = Android.OS.Environment.ExternalStorageDirectory.ToString();
string filePath = System.IO.Path.Combine(dir, fileName);
using (System.IO.Stream file = System.IO.File.Create(filePath))
{
myStream.CopyTo(file);
}
它把文件写得很好。那条路看起来像/storage/emulated/0/MyBitmap.png
。
现在奇怪的是/storage/emulated/0/MyBitmap.png
,即使文件存在、不为空、代码具有读取权限并且用户已授予权限,我也无法将第二个路径 ( ) 附加到电子邮件。但是第一个路径 ( content://media/external/images/media/164
) 没有问题,即使我不希望它:
你能告诉我这里发生了什么吗?我已经用谷歌搜索了这个,并认为我正在以一种可行的方式进行操作。但它不仅不起作用,而且有不同的做事方式,这是没有意义的,工作真的很混乱。
解决方案
content:// uris 由应用程序解析,为尝试“解析”它的人提供 InputStream,您可以实现 ContentProvider 并处理您的内部路径,只需提供 URI。或者尝试将模式提供给路径为 file://storage/emu...
推荐阅读
- php - Laravel 6.0 购物车包:缺少 [Route: cart.update] [URI: {rowId}] 所需的参数
- kubernetes - Helm 3.0.2 试运行 + stable/prometheus-operator?这应该工作吗?
- regression - 使用 mvtnorm 包构建我自己的多项概率模型
- c# - Nlog 在 Dotnetty 处理程序中无法正常工作
- javascript - 未定义的结果 foreach 数组 javascript
- session - OneLogin 程序化会话 cookie 验证 - 无浏览器
- r - data.frame 中每一列的利润回撤
- android - 优化 Android Studio - 最小化杀毒软件对构建速度的影响
- html - 我们如何改变 HTML 进度条音频的颜色?
- wordpress - 未指定自定义帖子时显示自定义帖子存档