代码之家  ›  专栏  ›  技术社区  ›  ibrahim

无法在DownloadManager类中动态更改下载文件的名称

  •  0
  • ibrahim  · 技术社区  · 6 年前

    我正在使用下载管理器类下载MP3文件。

        DownloadManager downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
    //dls is an arraylist that holds the download links
                    Uri uri=Uri.parse(dls.get(0));
                    DownloadManager.Request request= new DownloadManager.Request(uri);
    
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,"file.mp3");
                    downloadManager.enqueue(request);
    

    这个 setDestinationInExternalPublicDir 方法需要第二个参数,该参数将更改下载文件的名称。

    我希望文件有它的默认名称。如果我不使用该方法,该文件将有其默认名称,但不会位于下载目录中。

    如何实现这两个目标,在下载目录中找到文件并保留文件的名称不变?

    谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Abcd    6 年前

    你能试试这个吗:

    public static String getFileNameFromURL(String url) {
    if (url == null) {
        return "";
    }
    try {
        URL resource = new URL(url);
        String host = resource.getHost();
        if (host.length() > 0 && url.endsWith(host)) {
            // handle ...example.com
            return "";
        }
    }
    catch(MalformedURLException e) {
        return "";  
    }
    
    int startIndex = url.lastIndexOf('/') + 1;
    int length = url.length();
    
    // find end index for ?
    int lastQMPos = url.lastIndexOf('?');
    if (lastQMPos == -1) {
        lastQMPos = length; 
    }
    
        // find end index for #
        int lastHashPos = url.lastIndexOf('#');
        if (lastHashPos == -1) {
        lastHashPos = length;   
        }
    
        // calculate the end index
         int endIndex = Math.min(lastQMPos, lastHashPos);
        return url.substring(startIndex, endIndex);
    }
    

    此方法可以处理以下类型的输入:

    Input: "null" Output: ""
    Input: "" Output: ""
    Input: "file:///home/user/test.html" Output: "test.html"
    Input: "file:///home/user/test.html?id=902" Output: "test.html"
    Input: "file:///home/user/test.html#footer" Output: "test.html"
    Input: "http://example.com" Output: ""
    Input: "http://www.example.com" Output: ""
    Input: "http://www.example.txt" Output: ""
    Input: "http://example.com/" Output: ""
    Input: "http://example.com/a/b/c/test.html" Output: "test.html"
    Input: "http://example.com/a/b/c/test.html?param=value" Output: "test.html"
    Input: "http://example.com/a/b/c/test.html#anchor" Output: "test.html"
    Input: "http://example.com/a/b/c/test.html#anchor?param=value" Output: "test.html"
    

    你可以在这里找到整个源代码: https://ideone.com/uFWxTL