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
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.
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.
Dieses Mal habe ich es als DownloadActivity erstellt. Das Layout ist ein einfaches Layout mit nur einer Schaltfläche und einem Fortschrittsbalken.
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.
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.
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