Xamarin Android WebView下载文件什么都不做

时间:2017-05-02 12:50:55

标签: android webview xamarin.android

我有一个webview,显示我没有制作的网站,所以我不知道它是如何工作的细节。

在这个网站上有几个按钮,可以下载动态生成的各种文件。以下是其中一个按钮上使用的网址请求示例:test.example.com/Test/Export/Stuff?format=Pdf

这会导致文件在我的桌面浏览器和我的手机Chrome上下载,但我的应用没有任何反应。

我已经在互联网上寻找解决方案,但我无法找到有效的解决方案。

我已尝试按照此处的说明设置DownloadListener:https://forums.xamarin.com/discussion/4605/download-file-by-webview但OnDownloadStart永远不会触发。

我也试过在我的自定义WebViewClient中使用ShouldOverrideUrlLoading拦截url请求,如其他帖子中所描述的那样没有运气。

以下是按钮的html代码:

<input id="exportPdfButton" class="secondary hover" format="Pdf" value="Download (PDF)" name="exportPdfButton" type="submit">
<script id="dxss_848651839" type="text/javascript">

<!--

var dxo = new MVCxClientButton('exportPdfButton');
dxo.InitGlobalVariable('exportPdfButton');
dxo.SetProperties({'autoPostBack':true,'isNative':true});
dxo.SetEvents({'Click':ExportButtonOnClick});
dxo.AfterCreate();

//-->
</script>

我已为ACCESS_DOWNLOAD_MANAGER,WRITE_EXTERNAL_STORAGE等设置权限。

任何人都可以帮我弄清楚我如何在应用程序中下载这些文件?否则,我可以提供任何其他信息来帮助吗?

1 个答案:

答案 0 :(得分:0)

  

任何人都可以帮我弄清楚如何在应用程序中下载这些文件吗?

首先,请确保您的WebView启用了javascript并正确设置了WebViewClient:

mWebview = FindViewById<WebView>(Resource.Id.mWebview);
mWebview.Download += MWebview_Download;
var client = new WebViewClient();
mWebview.Settings.JavaScriptEnabled = true;
mWebview.SetWebViewClient(client);

mWebview.LoadUrl("your url");

然后在WebView.Download事件中使用DownloadManager下载文件:

private void MWebview_Download(object sender, DownloadEventArgs e)
{
    var url = e.Url;
    DownloadManager.Request request = new DownloadManager.Request(Uri.Parse(url));

    request.AllowScanningByMediaScanner();
    request.SetNotificationVisibility(DownloadManager.Request.VisibilityVisibleNotifyCompleted); //Notify client once download is completed!
    request.SetDestinationInExternalPublicDir(Environment.DirectoryDownloads, "CPPPrimer");
    DownloadManager dm = (DownloadManager)GetSystemService("download");
    dm.Enqueue(request);
    Toast.MakeText(ApplicationContext, "Downloading File",ToastLength.Long//To notify the Client that the file is being downloaded
                ).Show();
    }