108 votes

Comment accéder au dossier des téléchargements dans Android ?

Je suis nouveau sur Android, je suis en train de créer une application dans laquelle on peut télécharger des fichiers dans le dossier de téléchargement (en utilisant Download Manager). Je peux voir les images si je vais dans le dossier de téléchargement dans l'émulateur. Donc si je veux afficher un diaporama des fichiers téléchargés, comment puis-je accéder à ce dossier ? Deuxièmement, comment ajouter une barre de progression à ce code :--

import java.util.Arrays;

import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class Download_managerActivity extends Activity {
     private long quueue_for_url;

     private DownloadManager dm;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            BroadcastReceiver receiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction();

                    if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                        long downloadId = intent.getLongExtra(
                                DownloadManager.EXTRA_DOWNLOAD_ID, 0);
                        Query query = new Query();
                        query.setFilterById(quueue_for_url);
                        Cursor c = dm.query(query);
                        if (c.moveToFirst()) {
                            int columnIndex = c
                                    .getColumnIndex(DownloadManager.COLUMN_STATUS);
                            if (DownloadManager.STATUS_SUCCESSFUL == c
                                    .getInt(columnIndex)) {

                                ImageView view = (ImageView) findViewById(R.id.imageView1);
                                String uri_String_abcd = c
                                        .getString(c
                                                .getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                                view.setImageURI(Uri.parse(uri_String_abcd));

                            }
                        }
                    }
                }
            };

            registerReceiver(receiver, new IntentFilter(
                    DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        }

        public void onClick(View view) {
            dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

            Request request_for_url = new Request(
                    Uri.parse("http://fc03.deviantart.net/fs14/i/2007/086/9/1/Steve_Jobs_portrait_by_tumb.jpg"));

            Request request_for_url1 = new Request(
                    Uri.parse("http://2.bp.blogspot.com/_q7Rxg4wqDyc/S5ZRVLxVYuI/AAAAAAAAAvU/fQAUZ2XFcp8/s400/katrina-kaif.jpg"));
            Request request_for_url2 = new Request(
                    Uri.parse("http://www.buzzreactor.com/sites/default/files/Bill-Gates1.jpg"));

            quueue_for_url = dm.enqueue(request_for_url);
            quueue_for_url = dm.enqueue(request_for_url1);
            quueue_for_url = dm.enqueue(request_for_url2);

        }

        public void showDownload(View view) {
            Intent i = new Intent();
            //try more options to show downloading , retrieving and complete
            i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS);
            startActivity(i);
        }
    }

Je veux ajouter un bouton qui exécute la fonction de prendre les images du dossier de téléchargement puis de les afficher comme un diaporama.

main.xml:-

271voto

slkorolev Points 4077

Pour votre première question, essayez

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 

(disponible depuis l'API 8)

Pour accéder aux fichiers individuels dans ce répertoire, utilisez soit [File.list()](http://developer.android.com/reference/java/io/File.html#list()) ou [File.listFiles()](http://developer.android.com/reference/java/io/File.html#listFiles()). Il semble que le suivi de la progression du téléchargement n'est possible que dans la notification, voir ici.

40voto

Mis à jour

getExternalStoragePublicDirectory() est obsolète.

Pour obtenir le dossier de téléchargement à partir d'un Fragment,

val downloadFolder = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

À partir d'une Activity,

val downloadFolder = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

downloadFolder.listFiles() listera les Files.

downloadFolder?.path vous donnera le chemin de type String du dossier de téléchargement.

Mise à jour :

L'accès direct au système de fichiers de stockage est devenu limité dans les versions récentes d'Android.

context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) vous donne le répertoire /emulated/0/Android/data/{package}/files/Download. Si vous souhaitez avoir le dossier de téléchargement public, consultez le cadre de stockage de la documentation Android.

27voto

mac Points 271

Vous devez définir cette autorisation dans votre fichier manifest.xml

android.permission.WRITE_EXTERNAL_STORAGE

11voto

Mark Lu Points 602

Si vous utilisez Marshmallow, vous devez soit :

  1. Demander des autorisations à l'exécution (l'utilisateur pourra accepter ou refuser la demande) ou :
  2. L'utilisateur doit aller dans Paramètres -> Applications -> {Votre application} -> Autorisations et accorder l'accès au stockage.

Cela est dû au fait qu'avec Marshmallow, Google a complètement revu le fonctionnement des autorisations.

8voto

Boris Points 1440

Si vous utilisez un shell, le chemin d'accès du dossier Téléchargement (sans "s") est

/storage/emulated/0/Download

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X