【问题标题】:Unauthorized Access in Xamarin when trying to download a file from an url尝试从 url 下载文件时 Xamarin 中的未经授权访问
【发布时间】: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

标签: xamarin download


【解决方案1】:

您的代码将无法在 API 级别 23 或更高级别上运行。

您必须在运行时请求许可。这是关于那个的帖子:https://devblogs.microsoft.com/xamarin/requesting-runtime-permissions-in-android-marshmallow/

【讨论】:

  • 像魔术一样工作,缺少运行时权限,终于完成了,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 2022-06-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多