存储文件的ContentProvider
基于SQLite的ContentProvider我们见得多了,但是我们在做Android应用时,有时候程序需要下载网络上的图片,这时候我们希望能够把图片缓存到客户端本地,下次再要显示该图片时就不用再从网络上下载了,直接从本地缓存读取,这就需要用到存储文件的ContentProvider 。
这里只关注如何通过ContentProvider缓存图片,对Android本地文件操作不熟悉的同学可以参考Android文件存储,其他内容就不介绍了。
在Mainfest文件中,我们定义的ContentProvider名称为FileProvider,最后别忘了添加权限android.permission.WRITE_EXTERNAL_STORAGE
FileContentProvider代码如下,其中openFile是必须实现的方法,已经对关键的代码给出了注释package com.ipjmc.demo.fileprovider;import java.io.FileNotFoundException;import java.io.InputStream;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.widget.ImageView;public class FileProviderActivity extends Activity {public static final Uri URI = Uri.parse("content://com.ipjmc.demo.fileprovider/pic.png");ImageView mImageView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mImageView = (ImageView) findViewById(R.id.image);try { //通过ContentResolver获取图片的输入流,再转化为BitmapInputStream is = getContentResolver().openInputStream(URI);Bitmap bitmap = BitmapFactory.decodeStream(is);mImageView.setImageBitmap(bitmap);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}