我下载时没有得到默认文件名

时间:2014-04-26 16:40:49

标签: android webview android-webview download-manager

我创建了一个webview应用程序,我添加了下载程序,其中下载文件结束m4a ..该应用程序下载文件但文件名更改...如何从文件中获取标题...

 public boolean shouldOverrideUrlLoading(WebView view, String url) {
       // handle different requests for different type of files
       // this example handles downloads requests for .m4a and .mp3 files
       // everything else the webview can handle normally
       if (url.endsWith(".m4a")) {
           Uri source = Uri.parse(url);
           // Make a new request pointing to the .apk url
           DownloadManager.Request request = new DownloadManager.Request(source);
           // appears the same in Notification bar while downloading
           request.setDescription("Description for the DownloadManager Bar");
           request.setTitle(getTitle());
           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
               request.allowScanningByMediaScanner();
               request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
           }
           // save the file in the "Downloads" folder of SDCARD
           request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "filename");
           // get download service and enqueue file
           DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
           manager.enqueue(request);
       }
       else if(url.endsWith(".mp3")) {
           // if the link points to an .mp3 resource do something else
       }
       // if there is a link to anything else than .m4a or .mp3 load the URL in the webview
       else view.loadUrl(url);
       return true;                
     }
      });

2 个答案:

答案 0 :(得分:3)

这将为您提供文件名

final String[] separated = url.split("/");
final String myFile = separated[separated.length - 1];

它将使用/字符拆分url,然后获取返回数组中的最后一个元素。

数组是基于0的,所以最后一个元素是位于向量长度为​​1的元素。

将上面的代码放在此行之前:if (url.endsWith(".m4a")) {,您要获取文件名。

然后,使用它:

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, myFile);

答案 1 :(得分:0)

在不调用网络浏览器的情况下在webview中下载文件的完整代码

  @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       // handle different requests for different type of files
       // this example handles downloads requests for .m4a and .mp3 files
       // everything else the webview can handle normally

       if (url.endsWith(".m4a")) 
       {
           Uri source = Uri.parse(url);
           final String[] separated = url.split("/");
           final String myFile = separated[separated.length - 1];
           // Make a new request pointing to the .apk url
           DownloadManager.Request request = new DownloadManager.Request(source);
           // appears the same in Notification bar while downloading
           request.setDescription("Description for the DownloadManager Bar");
           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
               request.allowScanningByMediaScanner();
               request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
           }
           // save the file in the "Downloads" folder of SDCARD
           request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, myFile);
           // get download service and enqueue file
           DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

           manager.enqueue(request);
 }

   else if (url.endsWith(".pdf")) 
   {
   Uri source = Uri.parse(url);
   final String[] separated = url.split("/");
   final String myFile = separated[separated.length - 1];
   // Make a new request pointing to the .apk url
   DownloadManager.Request request = new DownloadManager.Request(source);
   // appears the same in Notification bar while downloading
   request.setDescription("Description for the DownloadManager Bar");
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
       request.allowScanningByMediaScanner();
       request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
   }
   // save the file in the "Downloads" folder of SDCARD
   request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, myFile);
   // get download service and enqueue file
   DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

   manager.enqueue(request);


  }
 // if there is a link to anything else than .m4a or .mp3 load the URL in the webview
else view.loadUrl(url);
       return true;                
  }
     });