Android 如何在 DiskLruCache 中使用 ContentProvider
How to use a ContentProvider with DiskLruCache in Android
在我的 Android 应用程序中,我想在磁盘上缓存图像,然后这些图像将显示在 WebView
中,为此我需要通过某种路径或 URI 访问文件。 (为了使用 <img src="..">
。)我发现的所有缓存实现都不提供对绝对文件路径的访问,而是 return InputStreams
或 Bitmap
对象。
是否可以实现一个 ContentProvider
,我可以用它来将 Bitmap
对象转换成某种文件,比如在我的 WebView
中加入 <img src="content://my/image.png">
?
重写 ContentProvider#openFile(Uri uri, String mode)
,如果您的内容是内存缓存数据并且您不能 return ParcelFileDescriptor#open(File file, int mode)
、ParcelFileDescriptor#fromFd(int fd)
或 ParcelFileDescriptor#fromSocket(Socket socket)
使用辅助方法ContentProvider#openFileHelper(Uri uri, String mode)
或使用 ParcelFileDescriptor#createPipe()
并实施您的自定义生产者部分
在我的 Android 应用程序中,我想在磁盘上缓存图像,然后这些图像将显示在 WebView
中,为此我需要通过某种路径或 URI 访问文件。 (为了使用 <img src="..">
。)我发现的所有缓存实现都不提供对绝对文件路径的访问,而是 return InputStreams
或 Bitmap
对象。
是否可以实现一个 ContentProvider
,我可以用它来将 Bitmap
对象转换成某种文件,比如在我的 WebView
中加入 <img src="content://my/image.png">
?
重写 ContentProvider#openFile(Uri uri, String mode)
,如果您的内容是内存缓存数据并且您不能 return ParcelFileDescriptor#open(File file, int mode)
、ParcelFileDescriptor#fromFd(int fd)
或 ParcelFileDescriptor#fromSocket(Socket socket)
使用辅助方法ContentProvider#openFileHelper(Uri uri, String mode)
或使用 ParcelFileDescriptor#createPipe()
并实施您的自定义生产者部分