web-dev-qa-db-fra.com

comment accéder au dossier de téléchargements dans Android?

Je suis un nouvel Android, je crée une application dans laquelle on peut télécharger des fichiers dans le dossier de téléchargement (à l'aide du Gestionnaire de téléchargement). Je peux voir des images si je vais dans le dossier des téléchargements de l'émulateur. Donc, si je veux montrer un diaporama de fichiers téléchargés, comment puis-je obtenir l'accès à 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 souhaite ajouter un bouton permettant de prendre les photos à partir du dossier de téléchargement, puis de les afficher comme un diaporama.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
      package="cmpe235.lab1"
      Android:versionCode="1"
      Android:versionName="1.0">
    <uses-sdk Android:minSdkVersion="9" />

<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>

    <application Android:icon="@drawable/icon" Android:label="@string/app_name">
        <activity Android:name=".Download_managerActivity"
                  Android:label="@string/app_name">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

main.xml: -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">


    <Button Android:text="Start Download" Android:id="@+id/button1"
        Android:layout_width="wrap_content" Android:layout_height="wrap_content"
         Android:layout_gravity="center_vertical|center_horizontal|center" Android:textColor="#0000A0" 
         Android:typeface="serif" Android:onClick="onClick"></Button>

    <Button Android:text="View Downloads" Android:id="@+id/button2"
        Android:layout_width="wrap_content" Android:layout_height="wrap_content"
         Android:layout_gravity="center_vertical|center_horizontal|center" Android:textColor="#0000A0" 
         Android:typeface="serif" Android:onClick="showDownload"></Button>

    <ImageView Android:layout_height="wrap_content" Android:id="@+id/imageView1"
        Android:src="@drawable/icon" Android:layout_width="wrap_content"></ImageView>

</LinearLayout>
67
Dhruv

Pour votre première question, essayez

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 

(disponible depuis API 8)

Pour accéder aux fichiers individuels de ce répertoire, utilisez soit File.list () ou File.listFiles () . Il semble que la notification de la progression du téléchargement ne soit possible que dans la notification, voir ici .

198
slkorolev

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

Android.permission.WRITE_EXTERNAL_STORAGE
25
mac

Si vous utilisez Marshmallow, vous devez soit:

  1. Autorisations de demande au moment de l'exécution (l'utilisateur autorisera ou refusera la demande) ou:
  2. L'utilisateur doit entrer dans Paramètres -> Applications -> {Votre application} -> Autorisations et accorder l'accès au stockage .

En effet, dans Marshmallow, Google a complètement réorganisé le fonctionnement des autorisations.

8
Mark Lu

Si vous utilisez un shell, le chemin du fichier de téléchargement (pas de "s") est

/storage/emulated/0/Download
0
Boris