2017-03-07 84 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