当我们在 Xamarin.Forms Android 应用程序中将目标 API 版本更改为 26 时无法 Read/Write 文件

Not able to Read/Write Files when we changed Target API Version to 26 in Xamarin.Forms Android Application

我们正在使用 Xamarin Forms 为 Android 和 iOS 开发我们的跨平台应用程序。

自 2018 年 11 月起,所有应用程序包都必须至少定位到 API 26,如果失败,应用程序将不会上传到 Play 商店。

所以在迁移到 API 26 目标版本时,我们遇到了将 read/write 文件存储到本地存储的问题。

代码如下:

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 播放警告至少要 API 26 级,我们需要立即帮助。

提前致谢

所以在整个互联网上搜索并阅读了这么多文章之后,对我有帮助的是为 Read/Write 存储权限 添加 运行时权限。 这非常令人困惑,因为这些东西在较低的目标 API 水平上工作,比如 API 24。 现在终于可以做点事情了。