Wai Yan Hein
Wai Yan Hein

Reputation: 14841

How to detect the extension of file to download using DownloadManager in Android?

I start developing my very first Android project. In my project, I need to download media files, especially mp3 or mp4. I am downloading file using DownloadManager.

Here is my download code for 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);
    }

As you can see in my code, I am downloading only mp3 and setting the MIME type is constant. The file name and its extension is constant as well. What I want to do is to detect the file extension I will download. So can I set the MIME type programmatically and set the extension of file name. How can I achieve it in DownloadManager?

Upvotes: 1

Views: 5530

Answers (1)

Rohan Shrestha
Rohan Shrestha

Reputation: 107

Though its quite late, however here is the answer:

You can get the extension of the file to download using the code below and add the extension to your file name.

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

Upvotes: 1

Related Questions