c# - Xamarin.android WebView 下载管理器不工作
问题描述
我在 Xamarin 的自定义 WebView 中有一些问题
我在 Webview 中实现 Donwloadmanager
但它不适用于 Chrome Ver.70。
然后我升级 Chrome Ver.83,它是工作!
Chrome版本依赖有什么区别吗?
'''
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
//WebView Zoom//
Control.Settings.SetSupportZoom(true);
Control.Settings.BuiltInZoomControls = true;
Control.Settings.DisplayZoomControls = true;
Control.Settings.LoadWithOverviewMode = true;
Control.Settings.UseWideViewPort = true;
//WebView Zoom//
//WebView DownloadFile//
Control.Settings.AllowFileAccessFromFileURLs = true;
Control.Settings.AllowUniversalAccessFromFileURLs = true;
Control.SetWebChromeClient(new WebChromeClient());
Control.Settings.DomStorageEnabled = true;
Control.Settings.JavaScriptEnabled = true;
Control.SetDownloadListener(new WebViewDonwloadHelper());
//WebView DownloadFile//
}
}
'''
'''
public Context context = Android.App.Application.Context;
public void OnDownloadStart(string url, string userAgent, string contentDisposition, string mimetype, long contentLength)
{
var uri = Android.Net.Uri.Parse(url);
string fileName = contentDisposition.Replace("attachment; filename=", "");
fileName = fileName.Replace("\"", "");
fileName = Java.Net.URLDecoder.Decode(fileName, "UTF-8");
DownloadManager downloadManager = (DownloadManager)context.GetSystemService(Context.DownloadService);
DownloadManager.Request request = new DownloadManager.Request(uri);
String cookies = CookieManager.Instance.GetCookie(url);
request.AddRequestHeader("cookie", cookies);
request.AddRequestHeader("User-Agent", userAgent);
request.SetDescription("Downloading file");
//
request.SetAllowedNetworkTypes(DownloadNetwork.Wifi | DownloadNetwork.Mobile);
request.SetAllowedOverRoaming(false);
//
request.SetMimeType(getMimeType(Android.OS.Environment.DirectoryDownloads + "/" + fileName));
request.SetTitle(fileName);
request.AllowScanningByMediaScanner();
request.SetNotificationVisibility(Android.App.DownloadVisibility.Hidden);
request.SetDestinationInExternalPublicDir("/Exports/", fileName);
downloadManager.Enqueue(request);
OpenWebViewFile(downloadManager, fileName);
}
'''
解决方案
推荐阅读
- php - Laravel 从一个服务重定向到另一个服务页面
- c# - 如何在 C# ASP.Net 中删除同一类中两个接口之间的歧义引用?
- reactjs - 删除 Django Serializer 中的 Null 嵌套字段 --- 或如何使用 Null 进行迭代?
- javascript - 将 formData 添加到对象的数据源数组
- javascript - 加载更多项目不出现(Vue JS)
- css - 是否可以为具有特定过渡宽度的文本创建 CSS 线性渐变?
- python - 在 python 中使用 pikepdf
- c++ - 为什么两个不同的编译器给出两个不同的结果?
- mysql - 结合两张表格计算学生参加考试的次数
- r - 基于 R 中的查找表查找和替换,并将不匹配的保留原样