你怎么理解这个笔记
Note: A ContentProvIDer might be a more appropriate place to store
cached images if they are accessed more frequently,for example in an
image gallery application.
在这篇培训文章https://developer.android.com/training/displaying-bitmaps/cache-bitmap.html中?由于我无法从Cursor获取Bitmap或file,我如何通过ContentProvIDer缓存位图?最佳答案实际上,您可以使用ContentProvIDer读取和写入文件.
要在您自己的ContentProvIDer中支持此功能,您必须在getStreamTypes()方法中包含支持的文件MIME类型.检查AndroID ContentProvider tutorial here for more info的MIME类型部分.
您还需要实现openFile(Uri uri,String mode) method,您可以根据提供给ContentResolver的Uri实际选择文件目录和名称.以下是该方法的示例实现:
@OverrIDe public ParcelfileDescriptor openfile(Uri uri,String mode) throws fileNotFoundException { file root = getContext().getfilesDir(); file path = new file(root,uri.getEncodedpath()); path.mkdirs(); file file = new file(path,"file_"+uri.getLastPathSegment()); int imode = 0; if (mode.contains("w")) { imode |= ParcelfileDescriptor.MODE_WRITE_ONLY; if (!file.exists()) { try { file.createNewfile(); } catch (IOException e) { e.printstacktrace(); } } } if (mode.contains("r")) imode |= ParcelfileDescriptor.MODE_READ_ONLY; if (mode.contains("+")) imode |= ParcelfileDescriptor.MODE_APPEND; return ParcelfileDescriptor.open(file,imode); }
您可以使用此处的任何逻辑来选择文件目录.此代码只使用应用程序文件目录,但出于Bitmap缓存的目的,这应该使用临时缓存目录.
最后,访问ContentProvIDer文件数据的代码应如下所示:
ContentResolver cr = getContext().getContentResolver();inputStream inputStream = cr.openinputStream(uri);
或者,您可以使用ContentResolver.openOutputStream(uri)将文件数据写入ContentProvIDer.
Bitmap缓存教程需要进行相当多的修改才能将ContentProvIDer用作磁盘缓存,但我确实认为这是该笔记所指的内容.
总结以上是内存溢出为你收集整理的android – 如何在ContentProvider中缓存位图?全部内容,希望文章能够帮你解决android – 如何在ContentProvider中缓存位图?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)