首页 > 解决方案 > 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);
    }

'''

标签: c#androidxamarin

解决方案


推荐阅读