android - 如何在 webview 中使用下载管理器将 pdf/ppt/doc 文件下载到 sdcard

标签 android webview

我正在开发一个使用 webview 打开我的站点的 android 应用程序(url:learnportal.me),然后在输入正确的凭据后,它将加载一个普通的 html 页面,该页面有多个下载链接(那些都是pdf/ppt/doc文件)。
所有这一切都发生在 WebView 中。

我想要的只是直接在应用程序本身内进行下载,而无需重定向到移动设备中的默认 Web 浏览器。

另外,我需要将文件下载到SD卡。

这是我目前正在处理的 MainActivity 页面...但不确定它是否正确

public class MainActivity extends Activity {  
 @SuppressWarnings("deprecation")  
 @SuppressLint("SetJavaScriptEnabled")  
 @Override  
 protected void onCreate(Bundle savedInstanceState) {  
      super.onCreate(savedInstanceState);  
      WebView webview = new WebView(this);  
      webview.setWebChromeClient(new WebChromeClient());  
      WebViewClient client = new ChildBrowserClient();  
      webview.setWebViewClient(client);  
      WebSettings settings = webview.getSettings();  
      settings.setJavaScriptEnabled(true);  
      //webview.setInitialScale(1);  
      //webview.getSettings().setUseWideViewPort(true);  
      settings.setJavaScriptCanOpenWindowsAutomatically(false);  
      //settings.setBuiltInZoomControls(true);  
      settings.setPluginState(PluginState.ON);  
      settings.setDomStorageEnabled(true);  
      webview.loadUrl("http://learnportal.me");  
      //webview.setId(5);  
      //webview.setInitialScale(0);  
      //webview.requestFocus();  
     // webview.requestFocusFromTouch();  
      setContentView(webview);  
 }  
 /**  
  * The webview client receives notifications about appView  
  */  
 public class ChildBrowserClient extends WebViewClient {  
      @SuppressLint({ "InlinedApi", "NewApi" })  
      @Override  
      public boolean shouldOverrideUrlLoading(WebView view, String url) {  
           boolean value = true;  
           String extension = MimeTypeMap.getFileExtensionFromUrl(url);  
           if (extension != null) {  
                MimeTypeMap mime = MimeTypeMap.getSingleton();  
                String mimeType = mime.getMimeTypeFromExtension(extension);  
                if (mimeType != null) {  
                     if (mimeType.toLowerCase().contains("pptx")  
                               || extension.toLowerCase().contains("pdf")  
                               || extension.toLowerCase().contains("doc")
                               || extension.toLowerCase().contains("ppt")){  
                          DownloadManager mdDownloadManager = (DownloadManager) MainActivity.this  
                                    .getSystemService(Context.DOWNLOAD_SERVICE);  
                          DownloadManager.Request request = new DownloadManager.Request(  
                                    Uri.parse(url));
                          File destinationFile = new File(Environment.getExternalStorageDirectory(),getFileName(url));
                          request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
                          request.setDescription("Downloading via LearnPortal..");  
                          request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                          request.setDestinationUri(Uri.fromFile(destinationFile));
                          mdDownloadManager.enqueue(request);  
                          value = false;  
                     }  
                }  
                if (value) {  
                     view.loadUrl(url);  
                }  
           }  
           return value;  
      }  
      @Override  
      public void onPageFinished(WebView view, String url) {  
           super.onPageFinished(view, url);  
      }  
      /**  
       * Notify the host application that a page has started loading.  
       *   
       * @param view  
       *      The webview initiating the callback.  
       * @param url  
       *      The url of the page.  
       */  
      @Override  
      public void onPageStarted(WebView view, String url, Bitmap favicon) {  
           super.onPageStarted(view, url, favicon);  
      }  
 }  
 /**  
  * File name from URL  
  *   
  * @param url  
  * @return  
  */  
 public String getFileName(String url) {  
     String filenameWithoutExtension = "";  
     filenameWithoutExtension = String.valueOf(System.currentTimeMillis());  
     return filenameWithoutExtension;  
}
}

最佳答案

关于android - 如何在 webview 中使用下载管理器将 pdf/ppt/doc 文件下载到 sdcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20786275/

相关文章:

Javascript - 在长触摸期间做一些事情,在触摸结束时停止(Android)

android - 我从 HTTPConnection 调用获取证书并保存在信任管理器中,但 webView 需要 SSL 而不是 X509 证书,是否可以转换?

android - 不同设备配置的不同 Assets

Android webview 显示在 Galaxy S4 上变得困惑

Android 设备上的 PHP HTTP POST 使用 HttpURLConnection

android - 如何开发分享按钮来分享链接?

android - 使用处理程序时

java - 解析 JSON Android ArrayList

javascript - 在 webview 的本地 html 文件中在线加载 javascript?

javascript - 如何在 Android 中编写 JavaScript 应用程序