Webview не имеет setDownloadListener ()? - PullRequest
1 голос
/ 24 апреля 2019

У меня была проблема с загрузкой через 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.Source ... Почему мое веб-представление отличается?И как мне изменить это на это?Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

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

Init 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);

}
0 голосов
/ 24 апреля 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...