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

时间:2018-06-22 11:10:49

标签: java android android-download-manager

我正在使用Download Manager类来下载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 个答案:

答案 0 :(得分:0)

您能尝试一下吗?

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