如何解决如何使用 Xamarin Android 中的存储访问框架从 URL 下载文件并保存到公共外部目录?
目前,Xamarin Android 应用使用 GetExternalStoragePublicDirectory(自 API 级别 29 起已弃用)并启用 requestLegacyExternalStorage 以将文件从 Azure Blob 存储端点直接下载到下载目录中。
解决这个问题的官方方法是使用存储访问框架 (SAF) 并允许用户选择保存文件的目的地。注册了一个依赖服务如下:
FileDownloader.cs
public void DownloadFile(string url,string fileName)
{
Intent intent = new Intent(Intent.ActionCreateDocument);
intent.AddCategory(Intent.CategoryOpenable);
intent.PutExtra(Intent.ExtraTitle,fileName);
intent.PutExtra("download_url",url);
intent.SetType("application/pdf");
var activity = MainActivity.Instance;
activity.StartActivityForResult(intent,CREATE_PDF_REQUEST);
}
然后在onActivityResult中,处理请求代码和结果从url下载数据
MainActivity.cs
// rest of MainActivity.cs
protected override void OnActivityResult(int requestCode,Result resultCode,Intent data)
{
base.OnActivityResult(requestCode,resultCode,data);
try
{
switch (requestCode)
{
case CREATE_PDF_REQUEST:
string url = data.GetStringExtra("download_url");
Webclient client = new Webclient();
client.DownloadFile(url,data.DataString);
break;
default:
// do something
}
}
catch (Exception ex)
{
//do something
}
}
点击具有事件侦听器并调用依赖项服务的按钮时会激活流程,如下所示:
viewmodel.cs
DependencyService.Get<FileDownloaderInterface>().DownloadFile(url,fileName);
然而,url 始终为空。从而导致畸形的 Uri 异常。我在这里做错了什么?
另外,我想在 onActivityResult 中等待异步调用。是否可能或我必须运行 Task.Run(() => await client.DownloadFileAysnc())?
Xamarin 表单 4.6.0 版
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。