Android: How to use download manager class?

前端 未结 4 1822
再見小時候
再見小時候 2020-11-28 11:26

I want to download a binary file from a url. Is it possible to use the Android download manager class that I found here DownloadManager class?

相关标签:
4条回答
  • 2020-11-28 11:38

    Make sure the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions is in your Manifest.xml file:

    And then include this code in your download function

    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
    
      // this will request for permission when user has not granted permission for the app 
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
    }
    
    else{ 
         //Download Script
    
    DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);       
    Uri uri = Uri.parse("URL of file to download");         
    DownloadManager.Request request = new DownloadManager.Request(uri);        
     request.setVisibleInDownloadsUi(true);        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);        
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, uri.getLastPathSegment());        
    downloadManager.enqueue(request);
     }
    
    0 讨论(0)
  • 2020-11-28 11:57
    DownloadManager downloadmanager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    Uri uri = Uri.parse("http://www.example.com/myfile.mp3");
    DownloadManager.Request request = new DownloadManager.Request(uri);
    request.setTitle("My File");
    request.setDescription("Downloading");
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setDestinationUri(Uri.parse("file://" + folderName + "/myfile.mp3"));
    downloadmanager.enqueue(request);
    
    0 讨论(0)
  • 2020-11-28 12:01

    Is it possible to use the android download manager class that i found here

    Yes, though that is only available since Android API Level 9 (version 2.3). Here is a sample project demonstrating the use of DownloadManager.

    0 讨论(0)
  • 2020-11-28 12:02

    Use DownloadManager class (GingerBread and newer only)

    GingerBread brought a new feature, DownloadManager, which allows you to download files easily and delegate the hard work of handling threads, streams, etc. to the system.

    First, let's see a utility method:

    /**
     * @param context used to check the device version and DownloadManager information
     * @return true if the download manager is available
     */
    public static boolean isDownloadManagerAvailable(Context context) {
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            return true;
        }
        return false;
    }
    

    Method's name explains it all. Once you are sure DownloadManager is available, you can do something like this:

    String url = "url you want to download";
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    request.setDescription("Some descrition");
    request.setTitle("Some title");
    // in order for this if to run, you must use the android 3.2 to compile your app
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    }
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "name-of-the-file.ext");
    
    // get download service and enqueue file
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    manager.enqueue(request);
    

    Download progress will be showing in the notification bar.

    0 讨论(0)
提交回复
热议问题