#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);
}