Wie man eine pdf-Datei herunterladen in Android?
Ich möchte zum download einer pdf-Datei von einer url.
Für die Anzeige der pdf-Datei, die ich benutzt den folgenden code ein.
File file = new File("/sdcard/example.pdf");
if (file.exists()) {
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
}
catch (ActivityNotFoundException e) {
Toast.makeText(OpenPdf.this, "No Application Available to View PDF",
Toast.LENGTH_SHORT).show();
}
}
Es funktioniert, aber wie bekomme ich die pdf-Datei von einer url (. e.g http://.../example.pdf
). Ich möchte download die pdf-Datei von dieser url. Bitte helfen Sie mir. Vielen Dank im Voraus.
InformationsquelleAutor der Frage Ramakrishna | 2011-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Herunterladen einer PDF-Datei funktioniert genauso wie der Download von einem anderen binären Datei.
HttpUrlConnection
getInputStream()
Methode, die Datei zu Lesen.FileOutputStream
und schreiben Sie den inputstream.Überprüfen dieser Beitrag zum Beispiel-source-code.
InformationsquelleAutor der Antwort THelper
Als pdf-Download:
Ah, wie ich gerade gefunden habe aus dieser ist geräteabhängig.
Szenarien
Wird der download des pdf-Dokuments in Ihrem browser/Download/Ordner
Haben Sie ein google docs-Konto - Es wird Sie bitten, zu unterzeichnen, dann sehen Sie sich die pdf im browser
Haben Sie einen pdf-reader installiert - App-abhängige fangen kann, kann es nicht
In allen Szenarien, wenn der Benutzer hat Zugriff auf die PDF-Datei mit einer Zeile code 🙂
InformationsquelleAutor der Antwort Blundell
Gibt es viele Möglichkeiten, um download-Dateien. Folgenden werde ich die meisten gemeinsamen Wege; es ist bis zu Sie zu entscheiden, welche Methode ist besser für die app.
1. Verwenden
AsyncTask
und zeigen Sie den download-Fortschritt in einem dialogDiese Methode ermöglicht es Ihnen, führen einige Prozesse im hintergrund und die Aktualisierung der Benutzeroberfläche in der gleichen Zeit (in diesem Fall aktualisieren wir eine progress-bar).
Dies ist ein Beispiel-code:
Den
AsyncTask
wird wie folgt Aussehen:Die oben genannte Methode (
doInBackground
) läuft immer auf einem hintergrund-thread. Man sollte nicht jede UI-Aufgaben gibt. Auf der anderen Seite, dieonProgressUpdate
undonPreExecute
laufen auf dem UI-thread, also dort können Sie die Statusanzeige:Für diese auszuführen, müssen Sie die WAKE_LOCK Erlaubnis.
2. Download von Service
Ist die große Frage hier ist: wie aktualisiere ich meine Aktivität von einem service?. Im nächsten Beispiel werden wir verwenden, zwei Klassen, die Sie möglicherweise nicht bewusst sein:
ResultReceiver
undIntentService
.ResultReceiver
ist die eine, die es uns ermöglichen, aktualisieren unseren thread von einem service;IntentService
ist eine Unterklasse vonService
die spawns einen thread für die hintergrund-Arbeit von dort aus (Sie sollten wissen, dass einService
läuft tatsächlich in dem gleichen thread der app; wenn Sie erweitertService
manuell müssen Sie laichen neue threads ausgeführt werden CPU-blockierenden Operationen).Download-service kann wie folgt Aussehen:
Fügen Sie den service, um Ihre manifest:
Und die Aktivität wird wie folgt Aussehen:
Hier
ResultReceiver
kommt zu spielen:2.1 Verwenden Groundy Bibliothek
Groundy ist eine Bibliothek, die im Grunde hilft Sie führen code-Stücken, die in einem hintergrund-Dienst, und es basiert auf der
ResultReceiver
Konzept oben gezeigt. Diese Bibliothek ist veraltet im moment. Dies ist, wie die ganze code würde wie folgt Aussehen:Die Aktivität, bei der Sie das Dialogfeld anzeigen...
Einen
GroundyTask
Implementierung von Groundy um die Datei herunterzuladen, und zeigen Sie den Fortschritt:Und fügen Sie einfach diese zu dem manifest:
Es könnte nicht einfacher sein, denke ich. Schnapp dir einfach den aktuellen jar - von Github und Sie sind bereit zu gehen. Beachten Sie, dass Groundy's Hauptzweck ist es, Anrufe zu externen REST-apis in einem hintergrund-service und post-Ergebnisse der Benutzeroberfläche mit einfach. Wenn Sie etwas tun möchten, in Ihrer app, es könnte wirklich sinnvoll sein.
2.2 die Nutzung https://github.com/koush/ion
3. Verwenden
DownloadManager
Klasse (GingerBread
und höher nur)Lebkuchen brachte eine neue Funktion, die
DownloadManager
die es Ihnen ermöglicht das herunterladen von Dateien einfach und delegieren Sie die harte Arbeit der Umgang mit threads, streams, etc. um das system.Erste, mal sehen, eine utility-Methode:
Methode der name erklärt alles. Sobald Sie sicher sind, dass
DownloadManager
verfügbar ist, können Sie etwas wie das hier tun:Download wird die Fortschritte zeigen sich in der notification bar.
Abschließende Gedanken
Ersten und zweiten Methoden sind nur die Spitze des Eisbergs. Es gibt viele Dinge, die Sie müssen im Hinterkopf behalten, wenn Sie möchten, dass Ihre app zu robust sein. Hier ist eine kurze Liste:
INTERNET
undWRITE_EXTERNAL_STORAGE
); auchACCESS_NETWORK_STATE
wenn Sie möchten, überprüfen Sie die internet-Verfügbarkeit.Es sei denn, Sie benötigen detaillierte Kontrolle der download-Prozess ist, dann erwägen Sie die Verwendung
DownloadManager
(3), weil es bereits behandelt die meisten der oben aufgeführten Gegenstände.Aber auch der Meinung, dass Ihre Bedürfnisse können sich ändern. Zum Beispiel
DownloadManager
keine Antwort-caching. Es wird blind den download der gleichen großen Datei mehrere Male. Es gibt keine einfache Möglichkeit, es zu beheben und nach der Tat. Wo, wenn Sie beginnen mit einer grundlegendenHttpURLConnection
(1, 2), dann alles, was Sie brauchen, ist zum hinzufügen einesHttpResponseCache
. So ist die anfängliche Anstrengung des Lernens, die basic -, standard-tools können eine gute Investition.InformationsquelleAutor der Antwort Arpit Patel
Es ist nicht notwendig, langwierige code zum öffnen und downloaden von pdf in android kann man einfach folgenden code verwenden, zum öffnen und downloaden von pdf -
InformationsquelleAutor der Antwort DEEP ADHIYA
Weitere Infos hier klicken http://androiddhina.blogspot.in/2015/09/how-to-download-pdf-from-url-in-android.html
InformationsquelleAutor der Antwort Dhina k