В Webview нет setDownloadListener()?

#c# #android #xamarin #webview

#c# #Android #xamarin #webview

Вопрос:

У меня была проблема с загрузкой через WebView, и я нашел этот код:

 mWebView.setDownloadListener(new DownloadListener() {
    public void onDownloadStart(String url, String userAgent,
                String contentDisposition, String mimetype,
                long contentLength) {
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    }
});

  

Проблема в том, что в моем WebView нет функции setDownladListener()… Я также видел, что они используют WebView.loadUrl(), и у меня этого тоже нет, у меня есть WebView.Источник…
Почему мой webview отличается? И как мне изменить его на это? Спасибо!

Комментарии:

1. Привет, братан, ты решил эту проблему?

2. Да, у меня есть, спасибо!

3. Хорошо, если ответ будет полезен, спасибо, что отметили его. И вы также можете показать свое решение в ответе 🙂

Ответ №1:

Веб-просмотр Xamarin Android .SetDownloadListener()

Ответ №2:

Использование Android.Webkit.WebView webView; первого в вашем коде.

Инициализировать WebView :

 webView = FindViewById<WebView>(Resource.Id.webView1);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new HelloWebViewClient());
webView.LoadUrl("https://www.xamarin.com/university");
webView.SetDownloadListener(new downloadListener());
  

Для этого необходимо создать пользовательский HttpClient (HelloWebViewClient), здесь есть LoadUrl метод:

 public class HelloWebViewClient : WebViewClient
{
    // For API level 24 and later
    public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
    {
        view.LoadUrl(request.Url.ToString());
        return false;
    }
}
  

И если хотите установить SetDownloadListener, необходимо создать IDownloadListener :

 public void OnDownloadStart(string url, string userAgent, string contentDisposition, string mimetype, long contentLength)
{
    DownloadManager.Request request = new DownloadManager.Request(Android.Net.Uri.Parse(url));

    request.AllowScanningByMediaScanner();
    request.SetNotificationVisibility(DownloadManager.Request.VisibilityVisibleNotifyCompleted);
    request.SetTitle("Download finish");
    request.SetAllowedOverMetered(true);
    request.SetVisibleInDownloadsUi(true);
    request.SetAllowedOverRoaming(true);

    //this file path need dynamic request permission
    //String fileName = URLUtil.GuessFileName(url, contentDisposition, "Downloadfile");
    //request.SetDestinationInExternalPublicDir(Application.Context.GetExternalFilesDir("Download").ToString() , fileName);

    DownloadManager downloadManager = DownloadManager.FromContext(this);
    long downloadId = downloadManager.Enqueue(request);

}