我们正在使用 Xamarin Forms 开发适用于 Android 和 iOS 的跨平台应用程序。
自 2018 年 11 月起,所有应用包都必须至少以 API 26 为目标,如果失败,应用将不会上传到 Play 商店。
因此在迁移到 API 26 目标版本时,我们面临着将文件读/写到本地存储的问题。
代码如下:
public async Task<string> Get_SavePath(string fileName, MemoryStream stream)
{
string root = null;
if (Android.OS.Environment.IsExternalStorageEmulated)
root = Android.OS.Environment.ExternalStorageDirectory.ToString();
else
root = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
Java.IO.File myDir = new Java.IO.File(root + "/Signatures");
myDir.Mkdir();
Java.IO.File file = new Java.IO.File(myDir, fileName);
if (file.Exists()) file.Delete();
try
{
FileOutputStream outs = new FileOutputStream(file);
outs.Write(stream.ToArray());
outs.Flush();
outs.Close();
}
catch (Exception e) { }
if (file.Exists())
{
Android.Net.Uri path = Android.Net.Uri.FromFile(file);
string pathString = Android.Net.Uri.FromFile(file).ToString();
return pathString;
}
else
{
return "";
}
}
行 FileOutputStream outs = new FileOutputStream(file);
总是给出异常 FileNotFoundException。
所以基本上这只发生在我们使用目标版本作为 API 26 时,如果降低目标版本它工作正常。
因此,请牢记 Google Play 警告至少要以 API 级别 26 为目标,我们需要立即帮助。
提前致谢
最佳答案
所以在搜索了整个互联网并阅读了很多文章之后,对我有帮助的是添加Read/Write Storage Permissions 的Runtime Permissions。 这非常令人困惑,因为这些东西在较低的目标 API 级别上工作,比如 API 24。 现在我终于可以做事了。
关于c# - 当我们在 Xamarin.Forms Android 应用程序中将目标 API 版本更改为 26 时无法读取/写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990859/