如何使用webview中的下载管理器将pdf / ppt / doc文件下载到SD卡

时间:2013-12-26 14:10:29

标签: android webview

我正在开发一个Android应用程序,它使用webview打开我的网站(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;  
}
}

1 个答案:

答案 0 :(得分:-1)