Rubick
Rubick

Reputation: 306

downloading on DownloadManager and saving file in setDestinationInExternalFilesDir() is not working on Android 10

Im using DownloadManager to save the mp4 that comes from the server. Im saving the file on storage/Emulated/0/Android/data/<packagename>/files/.Videos. I notice that on Android 9 and android 11 is successfully downloading it. But in Android 10 failed. I tried to enclose it on try{}catch{} method but i can't see anything on logs. I also try to add android:requestLegacyExternalStorage="true" on my Android Manifest.xml but the error still occurs. I also refer on this question which he/she using setDestinationUri() but still i can't find a way. BTW, this is my snippet of the DownloadRequest:

val path: String =
            context.getExternalFilesDir(null)?.absolutePath + "/" + ".Videos"

val downloadmanager: DownloadManager =
            context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
        val request: DownloadManager.Request = DownloadManager.Request(uri)
            .setTitle(videoName)
            .setDescription("Downloading")
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
            .setDestinationInExternalFilesDir(context, ".Videos", "test1.mp4")
            //.setDestinationUri(Uri.fromFile(File(path, "test.mp4")))
            //.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,videoName)
        val downloadId = downloadmanager.enqueue(request)

All response is deeply appreciated :)

Upvotes: 7

Views: 7109

Answers (3)

yousef Abbdolzadeh
yousef Abbdolzadeh

Reputation: 421

I have this problem in android Q and after a few times, I found this is for its Persian file name. and when I change the name of file, it's fixed.

Upvotes: 0

Asad
Asad

Reputation: 1439

there is still issue in using request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, "filename.pdf");

this worked in my case:

    val file = File(getPicturesDirPath(this), filename)
    val destUri = Uri.fromFile()
    request.setDestinationUri(destUri)
    
    private fun getPicturesDirPath(activity: Context): String{
            val file: File = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!
            if (!file.exists()) {
                file.parentFile.mkdirs()
                file.mkdir()
            }
    
            return file.absolutePath + "/"
    }
     

make sure you change Environment.DIRECTORY_PICTURES with your desired directory

Upvotes: 0

Himanshu Choudhary
Himanshu Choudhary

Reputation: 370

You can try this, it worked for my pdf download:

 request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");

You can use this by changing the Environment variable, I think.


Edit 1.0


 try{
            Uri uri = Uri.parse(downloadPath);

            DownloadManager.Request request = new DownloadManager.Request(uri);
            request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);  // Tell on which network you want to download file.
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);  // This will show notification on top when downloading the file.
            request.setTitle("Downloading data..."); // Title for notification.
            request.setVisibleInDownloadsUi(true);
            request.addRequestHeader("Authorization", "bearer my bearertoken"));
            request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");
            ((DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request); // This will start downloading
        }catch(Exception e){
            
        }

Upvotes: 7

Related Questions