首页 > 解决方案 > 直接将文件写入Android.OS.Environment.ExternalStorageDirectory 可以吗?

问题描述

我一直在尝试移植一些较旧的代码,并找到了一种将流写入文件的方法,然后再将其作为电子邮件的附件发送。

该代码最终使用

var path = MediaStore.Images.Media.InsertImage(Forms.Context.ContentResolver, myBitmap, "My Bitmap", "MyBitmap.png");

保存文件。path最终成为content://media/external/images/media/164164 似乎只是第 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) 没有问题,即使我不希望它:

在此处输入图像描述

你能告诉我这里发生了什么吗?我已经用谷歌搜索了这个,并认为我正在以一种可行的方式进行操作。但它不仅不起作用,而且有不同的做事方式,这是没有意义的,工作真的很混乱。

标签: xamarin

解决方案


content:// uris 由应用程序解析,为尝试“解析”它的人提供 InputStream,您可以实现 ContentProvider 并处理您的内部路径,只需提供 URI。或者尝试将模式提供给路径为 file://storage/emu...


推荐阅读