在 xamarin Forms Android 中访问被拒绝的 PDF 文件下载问题

Posted

技术标签:

【中文标题】在 xamarin Forms Android 中访问被拒绝的 PDF 文件下载问题【英文标题】:PDF File Download Issue of Access denied in xamarin Forms Android 【发布时间】:2021-05-10 15:07:04 【问题描述】:

我在 android Manifest 文件中拥有这些权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

也在运行时请求权限。

这是我的pdf下载代码

var documentsPath = (string)Android.OS.Environment.GetExternalStoragePublicDirectory("SHAZ");
string localPath = Path.Combine(documentsPath, filename);
File.WriteAllBytes(localPath, bytes);

这是我从安卓应用中得到的。

** System.UnauthorizedAccessException:对路径“/storage/emulated/0/SHAZ/ABC.pdf”的访问被拒绝。 在 System.IO.FileStream..ctor(System.String 路径、System.IO.FileMode 模式、System.IO.FileAccess 访问、System.IO.FileShare 共享、System.Int32 bufferSize、System.Boolean 匿名、System.IO。 FileOptions 选项)[0x001aa] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.IO/FileStream.cs:239 在 System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share) [0x00000] in /Users/builder/jenkins/workspace/archive -mono/2020-02/android/release/mcs/class/corlib/System.IO/FileStream.cs:91 在 (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor(string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) 在 System.IO.File.InternalWriteAllBytes (System.String path, System.Byte[] bytes) [0x00000] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/ src/System.IO.FileSystem/src/System/IO/File.cs:429 在 System.IO.File.WriteAllBytes (System.String path, System.Byte[] bytes) [0x00039] 在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/ src/System.IO.FileSystem/src/System/IO/File.cs:420 在 SaveFile.cs:25 中的 SHAZ_HR_Payroll.Droid.Models.SaveFile.SaveFiles(System.String 文件名,System.Byte[] 字节)[0x00034] 在 SHAZ_HR_Payroll.Pages.Employee.EmployeeChangePasswrod.BtnDownload_Clicked(System.Object 发件人,System.EventArgs e)[0x000d7] 在 \XYZ.xaml.cs:84 **

IDE:VS-2019 安卓版本:10 Xamarin 表单版本:5.0.0.1874

【问题讨论】:

这与下载无关。我觉得没什么。这与尝试在存储中创建文件有关。 是的,你是对的。保存文件系统时出现访问被拒绝的错误,尽管我给予了完全许可。 不,您请求了许可。但是您使用的是 Android 10 设备。 【参考方案1】:

如果针对 API 29+,即使您请求权限并且用户授予权限,您也会收到错误消息,因为他们更改了存储的工作方式。

但是,如果您像我一样,厌倦了 Android 每天让事情变得更加复杂,只需将 android:requestLegacyExternalStorage="true" 添加到您的清单 &lt;application&gt; 标记中,您就会被保存,直到您开始以 API 30 为目标。

【讨论】:

以上是关于在 xamarin Forms Android 中访问被拒绝的 PDF 文件下载问题的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Android 底部导航栏

将Xamarin.Android应用程序迁移到Xamarin.Forms应用程序

Xamarin.Forms:Android 项目构建错误 - AppData\Local\Xamarin 文件夹中缺少文件

在 Xamarin.Forms 中将默认的深色 Android 主题更改为白色?

Xamarin.Forms 手势密码实现

是否可以在 Xamarin Forms ContentView 中嵌入 Android.VideoView