2017-03-07 83 views
-2

我有应用程序的MainActivity这个样子,而这个应用程序无法下载文件,webview的Andriod应用程序的WebView下载

任何人知道如何解决下载问题?

using System; 
using Android.App; 
using Android.Content; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.OS; 
using Android.Webkit; 

namespace REC 
{ 
    [Activity(Label = "APPNAME", MainLauncher = true, Icon = "@drawable/rec512", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)] 

public class MainActivity : Activity 
{ 

    private WebView mWebView; 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     RequestWindowFeature(WindowFeatures.NoTitle); 
     SetContentView(Resource.Layout.Main); 

     mWebView = FindViewById<WebView>(Resource.Id.webview); 
     mWebView.Settings.SetRenderPriority(WebSettings.RenderPriority.High); 
     mWebView.Settings.JavaScriptEnabled = true; 
     mWebView.LoadUrl("http://www.APPname.com"); 
     mWebView.SetWebViewClient(new WebViewClient()); 

     // mWebView.SetDownloadListener(new MyDownloadListener() 



    } 


    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = (WebRequest)base.GetWebRequest(address); 

     // Perform any customizations on the request. 
     // This version of WebClient always preauthenticates. 
     request.PreAuthenticate = true; 
     return request; 
    } 






    class MonkeyWebChromeClient : WebChromeClient 
    { 
     public override bool OnJsAlert(WebView view, string url, string message, JsResult result) 
     { 
      return base.OnJsAlert(view, url, message, result); 
     } 

     public override Boolean OnJsConfirm(WebView view, String url, String message, JsResult result) 
     { 
      return base.OnJsConfirm(view, url, message, result); 
     } 

     public override Boolean OnJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) 
     { 
      return base.OnJsPrompt(view, url, message, defaultValue, result); 
     } 
    } 

    public override bool OnKeyDown(Keycode keyCode, KeyEvent e) 
    { 
     if (keyCode == Keycode.Back && mWebView.CanGoBack()) 
     { 
      mWebView.GoBack(); 

      return true; 
     } 

     return base.OnKeyDown(keyCode, e); 
    } 





} 
public class WebClient : WebViewClient 
{ 

    public override bool ShouldOverrideUrlLoading(WebView view, string url) 
    { 
     //return base.ShouldOverrideUrlLoading(view, url); 
     view.LoadUrl(url); 
     return true; 
    } 

    internal object GetWebRequest(Uri address) 
    { 
     throw new NotImplementedException(); 
    } 
} 
} 

回答

0

你没有实现的WebView下载收听,请参考下面的代码:

public class MainActivity : Activity 
{ 
    WebView wv1; 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView (Resource.Layout.Main); 
     wv1 = FindViewById<WebView>(Resource.Id.webView1); 
     wv1.SetDownloadListener(new MyDownloadListerner(this)); 
     wv1.LoadUrl("https://notepad-plus-plus.org/download/v7.3.2.html"); 
    } 
    class MyDownloadListerner : Java.Lang.Object, IDownloadListener 
    { 
     Context cont; 
     public MyDownloadListerner(Context context) 
     { 
      cont = context; 
     } 
     public void OnDownloadStart(string url, string userAgent, string contentDisposition, string mimetype, long contentLength) 
     { 
      Android.Net.Uri uri = Android.Net.Uri.Parse(url); 
      Intent intent = new Intent(Intent.ActionView,uri); 
      cont.StartActivity(intent); 
     } 
    } 
} 

注意:此方法是启动另一个浏览器下载,您还可以创建一个新的线程下载文件在OnDownloadStart功能。

屏幕截图:

enter image description here

+0

感谢你的答案,我会尝试。 – Y2H

+0

嗨,我添加的代码,它的工作原理,但打开一个浏览器,而不是在web视图中,是可以在webview中打开它? – Y2H

+0

@Mile Ma你知道如何在webview中下载文件吗? – Y2H