[JAVA] J'ai essayé d'utiliser le gestionnaire de téléchargement de fichiers open source d'Android Fetch

À propos de cet article

Cette fois, je vais l'implémenter dans l'application que je développe! Je me demandais si je devais utiliser DownloadManager, et quand je l'ai recherché, j'ai pensé que ce serait bien de le trouver, alors j'aimerais l'utiliser! Quand je l'ai recherché, je l'ai écrit en espérant qu'il y aurait peu d'informations en japonais et que je pourrais partager l'information! Je vais l'utiliser pour la première fois, alors faites-le moi savoir si vous faites une erreur! Cliquez ici pour la page GitHub

Cet environnement

Dans ce cas, le fichier est stocké dans Firebase CLoudStrage et nous obtiendrons l'URL de téléchargement et utiliserons cette URL pour télécharger. L'utilisation de Firebase Cloud Strage est omise.

Préparation

Tout d'abord, ajoutez une dépendance à build.gradle dans le dossier de l'application. Cette fois, je vais l'utiliser sur Android X, donc

implementation "androidx.tonyodev.fetch2:xfetch2:3.1.4"

Ajouter. Une fois ajouté, synchronisez.

Créer une activité

Cette fois, je l'ai créé en tant que DownloadActivity. La mise en page est une mise en page simple avec juste un bouton et une barre de progression. image.png

Obtenir l'URL de téléchargement CloudStrage

Obtenez l'URL pour le téléchargement. Dans le cas de Cloud Strage cette fois, comme il est défini uniquement pour les personnes qui ont été authentifiées par la règle de sécurité, vérifiez l'état de connexion avec Firebase Auth. Cette fois, exécutez-le dans onCreate et définissez le bouton pour être activé uniquement lorsque vous êtes connecté. De plus, si l'utilisateur n'est pas nul, essayez d'obtenir une référence Strage. Si vous l'utilisez dans un environnement réel, soyez un peu plus prudent. Également défini sur onClickListener.


Button downloadButton = findViewById(R.id.downloadbutton);
ProgressBar progressBar = findViewById(R.id.progressBar);

downloadButton.setOnClickListener(onClickListener);
if(FirebaseAuth.getInstance().getCurrentUser() == null) {
   downloadButton.setEnabled(false);
   }else {
    firebaseStorage = FirebaseStorage.getInstance();
    storageReference = firebaseStorage.getReference().child("Chemin sur Firebase Strage");
   }

View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    };

J'écrirai le processus dans onClick. Tout d'abord, lorsque vous appuyez sur le bouton, obtenez l'URL à télécharger.

storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                }
            });

Si l'acquisition réussit, uri renverra l'URL de téléchargement.

Processus de téléchargement

Créez une instance de Fetch. Cette fois, il a été généré par onCreate, mais veuillez l'ajuster en fonction de la situation. Définissez le nombre de téléchargements simultanés dans setDownloadCurrentLimit.

 FetchConfiguration fetchConfiguration = new FetchConfiguration.Builder(this)
                    .setDownloadConcurrentLimit(2)
                    .build();
            fetch = Fetch.Impl.getInstance(fetchConfiguration);

Générez ensuite une demande de téléchargement. Ceci est géré dans l'écouteur onClick. uri est l'URL de téléchargement que vous avez obtenue précédemment Pour filePath, spécifiez la destination d'enregistrement du terminal sous forme de chaîne.

downloadRequest = new Request(uri.toString(),filePath );

Générez un auditeur. Lorsque vous l'utilisez en production, écrivons un peu plus correctement le processus.


FetchListener fetchListener = new FetchListener() {
        @Override
        public void onWaitingNetwork(@NotNull Download download) {
        downloadStatusTextView.setText("En attente de connexion réseau");
        }

        @Override
        public void onStarted(@NotNull Download download, @NotNull List<? extends DownloadBlock> list, int i) {
        downloadStatusTextView.setText("Téléchargement");
        }

        @Override
        public void onError(@NotNull Download download, @NotNull Error error, @Nullable Throwable throwable) {
        downloadStatusTextView.setText("Erreur de téléchargement");
        }

        @Override
        public void onDownloadBlockUpdated(@NotNull Download download, @NotNull DownloadBlock downloadBlock, int i) {
        }

        @Override
        public void onAdded(@NotNull Download download) {
        }

        @Override
        public void onQueued(@NotNull Download download, boolean waitingOnNetwork) {
        }

        @Override
        public void onCompleted(@NotNull Download download) {
        downloadStatusTextView.setText("Téléchargement complet");
        }

        @Override
        public void onProgress(@NotNull Download download, long etaInMilliSeconds, long downloadedBytesPerSecond) {
            int progress = download.getProgress();
            progressBar.setProgress(progress);
        }

        @Override
        public void onPaused(@NotNull Download download) {
        }

        @Override
        public void onResumed(@NotNull Download download) {
        }

        @Override
        public void onCancelled(@NotNull Download download) {
        }

        @Override
        public void onRemoved(@NotNull Download download) {
        }

        @Override
        public void onDeleted(@NotNull Download download) {
        }
    };

Définissez l'auditeur.


        fetch.addListener(fetchListener);

Le téléchargement commencera.

        fetch.enqueue(downloadRequest, updatedRequest -> {
        }, error -> {
        });

Lorsque le téléchargement est terminé, l'écouteur onCompleted est appelé. Si vous avez plusieurs téléchargements

download.getId()

Vous pouvez obtenir l'ID de téléchargement avec.

Vous pouvez facilement interrompre le téléchargement.

//pause
fetch.pause(downloadrequest.getId());
//Annuler
fetch.cancel(downloadrequest.getId());

Vous pouvez également le télécharger uniquement lorsque vous utilisez le Wifi.

//Tous les types
downloadRequest.setNetworkType(NetworkType.ALL);
//Wifi uniquement
downloadRequest.setNetworkType(NetworkType.WIFI_ONLY);

En outre, il semble que vous puissiez gérer les téléchargements collectivement en tant que groupe.

Résumé

C'est un peu brouillon, mais c'est très utile! Cependant, si le fichier existe déjà dans la destination de téléchargement, il ne sera pas téléchargé, mais il semble être sur Terminé. J'ai répondu en renommant le fichier téléchargé, mais que dois-je faire? Il ne semble pas y avoir d'option d'écrasement. Si quelqu'un sait, faites-le moi savoir! Eh bien

Recommended Posts

J'ai essayé d'utiliser le gestionnaire de téléchargement de fichiers open source d'Android Fetch
J'ai essayé d'utiliser Gson
J'ai essayé d'utiliser TestNG
J'ai essayé d'utiliser Galasa
J'ai essayé d'utiliser azure cloud-init
J'ai essayé d'utiliser Apache Wicket
J'ai essayé d'utiliser Java REPL
J'ai essayé l'analyse du code source
J'ai essayé d'utiliser anakia + Jing maintenant
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé d'utiliser WebAssembly Stadio (version 2018/4/17)
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé d'utiliser l'API Elasticsearch en Java
J'ai essayé d'utiliser Realm avec Swift UI
J'ai essayé d'utiliser l'outil de diagnostic Java Arthas
J'ai essayé d'utiliser UICollectionViewListCell ajouté à partir de Xcode12.
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
C'est nouveau, mais j'ai essayé d'utiliser Groonga
J'ai essayé d'utiliser OpenCV avec Java + Tomcat