如何在Android中使用DownloadManager检测要下载的文件的扩展名?

时间:2016-02-05 09:28:37

标签: android android-download-manager

我开始开发我的第一个Android项目。在我的项目中,我需要下载媒体文件,尤其是mp3或mp4。我正在使用DownloadManager下载文件。

这是我的mp3下载代码

private void downloadPodcast(int id)
    {
        String url = context.getResources().getString(R.string.api_endpoint)+"podcast/download?id="+String.valueOf(id);

        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.setDescription("Downloading...");
        request.setTitle("Podcast");
        request.setMimeType("audio/MP3");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            request.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        }
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "audio.mp3");
        DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);
    }

正如您在我的代码中看到的那样,我只下载了mp3并且设置MIME类型是不变的。文件名及其扩展名也是不变的。我想要做的是检测我将下载的文件扩展名。因此,我可以以编程方式设置MIME类型并设置文件名的扩展名。如何在DownloadManager中实现它?

1 个答案:

答案 0 :(得分:1)

虽然已经很晚了,但是答案是这样的:

您可以使用以下代码获取要下载的文件扩展名,并将扩展名添加到文件名中。

String fileUrl = "http://someurl";
String fileName = "foobar";

String fileExtension = MimeTypeMap.getFileExtensionFromUrl(fileUrl);

// concatinate above fileExtension to fileName
fileName += "." + fileExtension;

DownloadManager.Request request = new DownloadManager.Request(Uri.parse(fileUrl))
                .setTitle(context.getString(R.string.app_name))
                .setDescription("Downloading " + fileName)
                .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE | DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);

DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        dm.enqueue(request);