android – 在WebView中打开附件

我在WebView上有一个附件.当我点击它时,没有任何反应.我知道
way在WebView上打开附件,但解决方案是基于条件的.是否有一些解决方案可以在不放置条件的情况下打开它,因为我的应用程序支持多个扩展附件.我不希望下载附件.

这就是我现在正在做的事情,这些仅仅是几个扩展:

if ((url.contains(".pdf") || url.contains(".xml") || url.contains(".xlsx") || url.contains(".docx") || url.contains(".ppt"))) {
                            url = org.apache.commons.lang3.StringUtils.join("http://docs.google.com/gview?embedded=true&url=", url);
                            browser.loadUrl(url);
                        }

最佳答案 你想要的只是部分可能的,并且总是需要异常处理.

在Android Webview中,您可以执行以下有关处理链接点击的操作:

1:设置webview客户端以拦截任何单击的URL:

通过设置Web客户端,您可以检查单击的URL,并为每个不同的URL指定操作.

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // you can try to open the url, you can also handle special urls here
        view.loadUrl(url);
        return false; // do not handle by default action
   }
});

您可以根据需要进行此操作,以处理非常需要首先下载的特定文件类型,但要在后台下载它们而不加载外部浏览器,您可以执行以下操作:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
       // handle different requests for different type of files
       // Download url when it is a music file
       if (url.endsWith(".mp3")) {
           Uri source = Uri.parse(url);
           DownloadManager.Request mp3req = new DownloadManager.Request(source);
           // appears the same in Notification bar while downloading
           mp3req.setDescription("Downloading mp3..");
           mp3req.setTitle("song.mp3");
           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
               mp3req.allowScanningByMediaScanner();
               mp3req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
           }                   
           mp3req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "song.mp3");
           DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
           manager.enqueue(mp3req);
      }
      else if(url.endsWith(".something")) {
          // do something else
      }
      //or just load the url in the web view
      else view.loadUrl(url);
      return true;                
}

2:拦截任何下载的文件:

您还可以使用此代码在启动下载时拦截.这样您就可以直接在应用中使用下载的内容.

mWebView.setDownloadListener(new DownloadListener() {
    public void onDownloadStart(String url, String userAgent,
                String contentDisposition, String mimetype,
                long contentLength) {
        //do whatever you like with the file just being downloaded

    }
});

没有保证,总是需要处理异常

可以由WebView处理的内容类型取决于所使用的WebView的版本,在当前时间点,WebView只能处理某些类型.例如,对于某些类型,需要特殊权限或html5视频的硬件加速.
另一个支持示例:Android 3.0之前不支持SVG.还有许多其他示例,在最近的WebView版本中已经实现了对某些类型的支持,但对于旧版本则不存在.

您可以在此处阅读有关当前WebView实现的更多信息:https://developer.chrome.com/multidevice/webview/overview

没有免费午餐这样的东西

点赞