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

Android 如何在webview中使用下载管理器将pdf/ppt/doc文件下载到SD卡,android,webview,Android,Webview,我正在开发一个android应用程序,它使用webview打开我的网站(url:learnportal.me),然后在输入正确的凭据后,它将加载一个普通的html页面,该页面有多个要下载的链接(这些都是pdf/ppt/doc文件)。 所有这些都发生在webview中 我只想让下载直接在应用程序本身中进行,而不需要重定向到移动设备中的默认web浏览器 此外,我需要文件下载到SD卡 这是我目前正在处理的主要活动页面。。。但不确定它是否正确 public class MainActivity exte

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

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

此外,我需要文件下载到SD卡

这是我目前正在处理的主要活动页面。。。但不确定它是否正确

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;  
}
}

使用DownloadListener并重写onDownloadStart

有关实际下载逻辑,请检查以下链接中的onDownloadStartNoStream

使用DownloadListener并重写onDownloadStart

有关实际下载逻辑,请检查以下链接中的onDownloadStartNoStream


当然,我会尝试一下。如果这里有人能根据我的要求修复我的上述代码,这将是一个很大的帮助。我已经为此工作了一周时间,试图找到合适的解决方案。我会尝试一下。如果这里有人能根据我的要求修复我的上述代码,这将是一个很大的帮助。我已经为此工作了一周时间试图找出合适的解决方案