2016-06-30 5 views
0

Der Versuch, ein PDF vom Server empfangen angezeigt werden, aber "Medien nicht gefunden Fehler"Android - Anzeige PDF vom Server

Zuerst bekommen konvertiere ich String Array Byte:

byte[] data = Base64.decode(stringData, Base64.DEFAULT); 

Dann schreibe ich das Byte [ ] in einer Datei:

String path = getFilesDir() + "/myfile.pdf";  
File file = new File(path); 

if (!file.exists()) { 
    file.createNewFile(); 
} 

FileOutputStream stream = new FileOutputStream(file); 
stream.write(article.getFileDataBytes()); 
stream.close(); 

Dann PDF ich versuche anzuzeigen:

Uri path2 = Uri.fromFile(file); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(path2, "application/pdf"); 
startActivity(intent); 

Aber nach startActivity Aufruf erhalte ich die „Medien nicht gefunden Fehler“

Ich bin nicht sicher, was falsch ist sind keine Ausnahmen ausgelöst, wenn die Datei zu schreiben

Antwort

1

Sie die Datei in dem internen Speicher zu schreiben. Keine Apps von Drittanbietern haben direkten Zugriff auf Ihren internen Speicher. Verwenden Sie FileProvider, um das PDF für Apps von Drittanbietern verfügbar zu machen.

This sample app tut ziemlich genau das, was Sie brauchen, außer dass ich die Start-PDF von einem Asset bekomme.

+0

Was ist die beste Vorgehensweise zum Bereinigen der Dateien, wenn sie nicht mehr benötigt werden? – MobileMon

+1

@MobileMon: Nun, das Problem ist, dass Sie nicht wissen, wann die andere App unbedingt damit fertig ist. Ich würde die Datei in 'getCacheDir()' (mein Beispiel verwendet 'getFilesDir()') für Anfänger, so dass im Falle von wenig Speicherplatz ist es leicht loswerden. Dann würde ich einen Thread beim App-Start starten, der Cache-Dateien loswird, die, sagen wir, älter als 24 Stunden sind. Sie müssen möglicherweise aggressiver als das sein, wenn Sie viele Dateien oder wirklich große Dateien oder etwas in der Art haben. "Best Practice" ist hier schwer zu definieren. – CommonsWare