androidkotlinandroid-10.0download-manager

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


Solution

  • 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){
                
            }