PDF runterladen und via Intent öffnen

M

mkl

Erfahrenes Mitglied
44
Hi Leute,

dieses Thema gibts glaube ich schon öfters zum. hat meine Suche schon das ein oder andere gefunden... Es gibt ein paar Beispiele im Netz wie man Bilder runterlädt aber zu PDF finde ich einfach nix...

Ich möchte eine PDF Datei aus dem Internet herunterladen und gezielt in einem Ordner /sdcard/pdfs/ abspeichern. Wenn das speichern fertig ist, soll diese PDF mittels Intent -> PDF Viewer geöffnet werden.

folgendes hab ich bisher aus dutzenden Quellen zusammengefrickelt:

Code:
DownloadManager mydl;
                
                mydl = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                Uri myuri = Uri.parse(filepfad);
                DownloadManager.Request request = new DownloadManager.Request(myuri);
                                                
                File file = new File("/sdcard/pdfs/UL13.pdf");
                Uri path = Uri.fromFile(file);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setDataAndType(path, "application/pdf");
                startActivity(intent);

Der Dateipfad ist derzeit noch "hartgecoded" weil ich prüfen wollte ob der Intent funktioniert. Das funktioniert soweit wunderbar! Nur herunterladen tut er mir nichts zum. seh ich in der Statusleiste keinen Download... Außerdem frage ich mich wie ich den Zielpfad angeben kann...

Wäre nett wenn ihr mir helfen könntet.
 
Hi mkl,

Code:
request.setShowRunningNotification(true);
das sollte helfen :)

Und danach warten bis DL fertig ist und lokalen Pfad finden:
Code:
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(downloadId);
			Cursor cursor = downloadManager.query(query);
			if (cursor.moveToFirst()) {
			   do {
				int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
				if (DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(columnIndex)) {
					Intent intentToOpen = new Intent(Intent.ACTION_VIEW);
					intentToOpen.setDataAndType(Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))), MimeTypeMap.getSingleton().getMimeTypeFromExtension("apk"));

					activity.startActivityForResult(intentToOpen,DeviceInfo.UPDATE_ACTIVITY_ID);
					}
				} while (cursor.moveToNext());

				cursor.close();
			}
		}
	}
};

activity.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

Hier habe ich eine APK runtergeladen und dann zum Installieren gestartet.
Der Teil mit der Suche.. da muss man ab und zu den DL-Ordner leeren ^^

regards
 
Erstma recht vielen Dank für eine Hilfe :thumbsup:

Folgende Probleme hab ich noch:

Code:
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId())
        {
            case R.id.erneuern:
                
                // Workaround für Kalenderwoche
                TimeZone tz = TimeZone.getTimeZone("GMT+1");
                Locale loc = Locale.GERMANY;
                Calendar cal = Calendar.getInstance(tz,loc);
                cal.setFirstDayOfWeek(Calendar.MONDAY);
                int week = cal.get(Calendar.WEEK_OF_YEAR);
                
                // Aktuellen Downloadpfad ermitteln
                String filepfad = pfad + String.valueOf(week) + ".pdf";      
                
                final DownloadManager mydl;                
                mydl = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                Uri myuri = Uri.parse(filepfad);
                DownloadManager.Request request = new DownloadManager.Request(myuri);
                
                request.setShowRunningNotification(true);
                
                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(downloadId);
                            Cursor cursor = mydl.query(query);
                            if (cursor.moveToFirst()) {
                               do {
                                int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
                                if (DownloadManager.STATUS_SUCCESSFUL == cursor.getInt(columnIndex)) {
                                    Intent intentToOpen = new Intent(Intent.ACTION_VIEW);
                                    intentToOpen.setDataAndType(Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))), MimeTypeMap.getSingleton().getMimeTypeFromExtension("apk"));

                                    Main.startActivityForResult(intentToOpen,DeviceInfo.UPDATE_ACTIVITY_ID);
                                    }
                                } while (cursor.moveToNext());

                                cursor.close();
                            }
                        }
                    }
                };
                
                Main.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
                
                /*File file = new File("/sdcard/pdfs/UL13.pdf");
                Uri path = Uri.fromFile(file);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setDataAndType(path, "application/pdf");
                startActivity(intent);*/
                
                
            default:
            
                return super.onOptionsItemSelected(item);
            
        }

Folgende Fehler hab ich noch:

In der Zeile:
Main.startActivityForResult(intentToOpen,DeviceInfo.UPDATE_ACTIVITY_ID);

DeviceInfo cannot be resolved to a variable

Muss ich hier einfach irg. eine Integer Variable anlegen oder was muss beachtet werden?

In der Zeile:
Main.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

Cannot make a static reference to the non-static method registerReceiver(BroadcastReceiver, IntentFilter) from the type ContextWrapper
 
Java lernen hilft weiter :)

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: Neeldarax
mkl schrieb:
Folgende Fehler hab ich noch:

In der Zeile:
Main.startActivityForResult(intentToOpen, DeviceInfo.UPDATE_ACTIVITY_ID);

DeviceInfo cannot be resolved to a variable

Muss ich hier einfach irg. eine Integer Variable anlegen oder was muss beachtet werden?

Jop :)
DeviceInfo ist eine Klasse mit der statischen int Variable.


mkl schrieb:
In der Zeile:
Main.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

Cannot make a static reference to the non-static method registerReceiver(BroadcastReceiver, IntentFilter) from the type ContextWrapper

Da hat Swordi schon recht. Vllt. googlest du nach Instanzenmethoden und Klassenmethoden.

registerReceiver ist eine Methode der Instanz und nicht der Klasse. Daher kein statischer Zugriff möglich.

Hoffe ich konnte weiterhelfen.

regards
 
Mhhh ich meine klar kenne ich den Unterschied zwischen allgemeinen Methoden und Instanzabhängigen Methoden aber irg. ist das ganze in Java viel stranger als in C++... Außerdem finde ich es sehr erschwerend wenn ich für einen einfachen Download immer 10 Zeilen Code brauche?!? Wozu zum Beispiel benötige ich den Cursor?

Könnt ihr mir eine möglichst deutsche Seite empfehlen wo ein solches Beispiel 1zu1 durchgespielt wird? Ich finde auf der developer.android.com seite irg. nur Referenzen und keine vernüftigen Samples...
 
Also ich hab den Download nun geschafft :) War nur eine Frage der richtigen Positionierung ;) Nun noch ne Frage ich finde nun den Download wenn ich unter Downloads (App) im Appdrawer gehe. Im Verzeichnis sdcard/Download/ ist jedoch nichts... Wie kann ich denn die File dort hin kopieren? Bzw. wo finde ich die Dateien?
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
118
swa00
swa00
Gemini-Media
Antworten
1
Aufrufe
1.820
swa00
swa00
J
  • JoEntwickler
Antworten
8
Aufrufe
1.335
JoEntwickler
J
Zurück
Oben Unten