[JAVA] Ich habe versucht, den Open Source-Download-Manager Fetch für Android zu verwenden

Über diesen Artikel

Dieses Mal werde ich es in der Anwendung implementieren, die ich entwickle! Ich habe mich gefragt, ob ich DownloadManager verwenden soll, und als ich es mir ansah, dachte ich, es wäre gut, es zu finden, also würde ich es gerne verwenden! Als ich es nachgeschlagen habe, gab es nicht viele Informationen auf Japanisch, daher möchte ich die Informationen teilen, also schreibe ich sie! Ich werde es zum ersten Mal verwenden, also lassen Sie es mich bitte wissen, wenn Sie einen Fehler machen! Klicken Sie hier für die GitHub-Seite

Diese Umgebung

In diesem Fall wird die Datei in Firebase CLoudStrage gespeichert, und wir erhalten die Download-URL und verwenden diese URL zum Herunterladen. Die Verwendung von Firebase Cloud Strage entfällt.

Vorbereitung

Fügen Sie zunächst im Anwendungsordner eine Abhängigkeit zu build.gradle hinzu. Dieses Mal werde ich es auf Android X verwenden, also

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

Hinzufügen. Nach dem Hinzufügen synchronisieren.

Erstellen einer Aktivität

Dieses Mal habe ich es als DownloadActivity erstellt. Das Layout ist ein einfaches Layout mit nur einer Schaltfläche und einem Fortschrittsbalken. image.png

Holen Sie sich die CloudStrage-Download-URL

Holen Sie sich die URL zum Download. Überprüfen Sie im Fall von Cloud Strage dieses Mal den Anmeldestatus mit Firebase Auth, da es nur für Personen festgelegt ist, die durch die Sicherheitsregel authentifiziert wurden. Führen Sie es diesmal in onCreate aus und stellen Sie die Schaltfläche so ein, dass sie nur aktiviert wird, wenn Sie angemeldet sind. Wenn der Benutzer nicht null ist, versuchen Sie auch, eine Strage-Referenz abzurufen. Wenn Sie es in einer tatsächlichen Umgebung verwenden, seien Sie bitte etwas vorsichtiger. Setzen Sie auch 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("Pfad auf Firebase Strage");
   }

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

        }
    };

Ich werde den Prozess in onClick schreiben. Wenn Sie auf die Schaltfläche klicken, rufen Sie zunächst die URL zum Herunterladen ab.

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

Wenn die Erfassung erfolgreich ist, gibt uri die Download-URL zurück.

Download-Prozess

Erstellen Sie eine Instanz von Fetch. Dieses Mal wurde es von onCreate generiert, aber bitte passen Sie es der Situation an. Legen Sie die Anzahl der gleichzeitigen Downloads in setDownloadCurrentLimit fest.

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

Generieren Sie dann eine Download-Anfrage. Dies wird im onClick-Listener erledigt. uri ist die Download-URL, die Sie früher erhalten haben Geben Sie für filePath das Speicherziel des Terminals als Zeichenfolge an.

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

Generieren Sie einen Listener. Wenn Sie es in der Produktion verwenden, schreiben wir den Prozess etwas genauer.


FetchListener fetchListener = new FetchListener() {
        @Override
        public void onWaitingNetwork(@NotNull Download download) {
        downloadStatusTextView.setText("Warten auf Netzwerkverbindung");
        }

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

        @Override
        public void onError(@NotNull Download download, @NotNull Error error, @Nullable Throwable throwable) {
        downloadStatusTextView.setText("Download Fehler");
        }

        @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("Download abgeschlossen");
        }

        @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) {
        }
    };

Stellen Sie den Listener ein.


        fetch.addListener(fetchListener);

Der Download wird gestartet.

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

Wenn der Download abgeschlossen ist, wird der Listener onCompleted aufgerufen. Wenn Sie mehrere Downloads haben

download.getId()

Sie können die Download-ID mit erhalten.

Sie können den Download leicht unterbrechen.

//Pause
fetch.pause(downloadrequest.getId());
//Stornieren
fetch.cancel(downloadrequest.getId());

Sie können es auch nur herunterladen, wenn Sie Wifi verwenden.

//Alle Arten
downloadRequest.setNetworkType(NetworkType.ALL);
//Nur Wifi
downloadRequest.setNetworkType(NetworkType.WIFI_ONLY);

Außerdem scheint es, dass Sie Downloads gemeinsam als Gruppe verwalten können.

Zusammenfassung

Es ist ein bisschen chaotisch, aber es ist sehr nützlich! Wenn die Datei jedoch bereits im Download-Ziel vorhanden ist, wird sie nicht heruntergeladen, sondern scheint vollständig zu sein. Ich habe daraufhin die Download-Datei umbenannt, aber was soll ich tun? Es scheint keine Überschreiboption zu geben. Wenn jemand weiß, lass es mich wissen! Na dann

Recommended Posts

Ich habe versucht, den Open Source-Download-Manager Fetch für Android zu verwenden
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, den Quellcode zu analysieren
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe versucht, Realm mit Swift UI zu verwenden
Ich habe versucht, das Java-Diagnosetool Arthas zu verwenden
Ich habe versucht, UICollectionViewListCell zu verwenden, das von Xcode12 hinzugefügt wurde.
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Es ist neu, aber ich habe versucht, Groonga zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden