web-dev-qa-db-fra.com

Android: Comment utiliser la classe du gestionnaire de téléchargement?

Je souhaite télécharger un fichier binaire à partir d'une URL. Est-il possible d'utiliser la classe de gestionnaire de téléchargement Android que j'ai trouvée ici classe DownloadManager ?

20
Kris

Est-il possible d'utiliser la classe de gestionnaire de téléchargement Android que j'ai trouvée ici

Oui, bien que cela ne soit disponible que depuis Android API Level 9 (version 2.3). Voici un exemple de projet démontrant l'utilisation de DownloadManager.

37
CommonsWare

Utiliser la classe DownloadManager (Gingerbread et plus récent uniquement)

Gingerbread a apporté une nouvelle fonctionnalité, DownloadManager, qui vous permet de télécharger facilement des fichiers et de déléguer au système le dur travail de gestion des threads, des flux, etc.

Voyons d'abord une méthode utilitaire:

/**
 * @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;
}

Le nom de la méthode explique tout cela. Une fois que vous êtes sûr que DownloadManager est disponible, vous pouvez faire quelque chose comme ceci:

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

La progression du téléchargement s'affichera dans la barre de notification.

12
m.chorakchi
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);
6
Dmarp

Assurez-vous que les autorisations READ_EXTERNAL_STORAGE et WRITE_EXTERNAL_STORAGE se trouvent dans votre fichier Manifest.xml:

Et puis incluez ce code dans votre fonction de téléchargement

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
Segun Emmanuel