2016-07-28 29 views
2

In meiner Android App möchte ich Bilder auf der Festplatte zwischenspeichern, die dann in einer WebView angezeigt werden, für die ich auf eine Art von Pfad oder URI zugreifen muss. (Um <img src=".."> zu verwenden.) Alle Caching-Implementierungen, die ich gefunden habe, bieten keinen Zugriff auf die absoluten Dateipfade, sondern geben InputStreams oder Bitmap Objekte zurück.Wie verwende ich einen ContentProvider mit DiskLruCache in Android

Ist es möglich, ein ContentProvider zu implementieren, die ich verwenden kann, wie Bitmap Objekte in etwas Datei zu verwandeln, indem <img src="content://my/image.png"> in meinem WebView zu haben?

+0

sicher, dass Ihre benutzerdefinierten Hersteller Teil verwenden verwenden: Überschreibung 'ParcelFileDescriptor openfile (@ NonNull Uri uri, @NonNull String-Modus) ' – pskink

+0

Wie bekomme ich einen ParcelFileDescriptor aus einem Stream? – janoliver

+0

hmmm, welchen Stream? Ihr Bild befindet sich irgendwo in Ihrem lokalen Dateisystem, oder? – pskink

Antwort

3

Überschreibung ContentProvider#openFile(Uri uri, String mode), wenn Ihr Inhalt in-Speicher-Daten zwischengespeichert und Sie können nicht zurück ParcelFileDescriptor#open(File file, int mode), ParcelFileDescriptor#fromFd(int fd) oder ParcelFileDescriptor#fromSocket(Socket socket) eine Hilfsmethode ContentProvider#openFileHelper(Uri uri, String mode) oder ParcelFileDescriptor#createPipe() und implementieren

+0

'openPipeHelper()' ist, was ich am Ende verwendet habe, wie Sie in den obigen Kommentaren vorgeschlagen. – janoliver

+0

Ja, in den meisten Fällen ist 'openPipeHelper()' gut genug – pskink