当我们在 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。
现在终于可以做点事情了。
我们正在使用 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。 现在终于可以做点事情了。