问题描述
目前,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 (将#修改为@)