【发布时间】:2019-09-18 06:11:24
【问题描述】:
我现在非常坚持使用 Xamarin.Forms/Android,我需要从手机“下载”目录中的特定 URL 下载 csv 文件,但是我不断收到 System.UnauthorizedAccessException: Access到路径“/storage/emulated/0/Download/myFile.csv”被拒绝。
public async Task DownloadAsync(string url)
{
try
{
using(var webClient = new WebClient())
{
var directoryPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
string pathToNewFile = Path.Combine(directoryPath, myFile.csv);
await webClient.DownloadFileTaskAsync(new Uri(url), pathToNewFile);
}
}
catch(Exception ex)
{
throw;
}
}`
这些是我的权限设置:
- 互联网
- WRITE_EXTERNAL_STORAGE
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- READ_EXTERNAL_STORAGE
我不明白为什么它不起作用。 顺便说一句,我正在物理设备(Pixel3)上进行测试,也许我应该在手机中设置一些配置......不知道这里出了什么问题
【问题讨论】:
-
您不能只写入设备的下载文件夹 - 您需要使用 DownloadManager
-
我不明白为什么我需要一个下载管理器,我的应用程序不应该像一个一样吗,基本上每种文件类型都代表一些字节块,我无法在手机上传输这些字节?有点迷茫
-
因为您的应用不允许直接写入系统下载文件夹。如果你想这样做,你需要使用 Android DownloadManager API。还有其他可用的用户可写文件夹可以使用,但下载不是其中之一。
-
@Denis 您需要向外部存储请求“运行时权限”并且用户必须接受,然后您可以保存您的文件:stackoverflow.com/a/48168838/4984832