ContentProvider是一个对外发布数据库操作的接口。
普通的SQLite数据库里面的数据库操作,只有当前应用程序自己的可以调用,其他程序无法调用。
如果想让其他程序来调用你的数据库,就需要自己为数据库建立一个ContentProvider,同时其他程序可以通过ContentResolver来调用Provider里封装好的方法。
自己在实际开发中不会编写ContentProvider,主要是编写resolver操作,来调用系统写好的Provider,相当于调用系统的数据库,完成自己需要的功能。
例如:
读取系统数据库中的联系人信息,通话日志,SD卡中所有的音频文件目录,视频文件目录,图片目录。
这里以读取所有音频文件功能为例,来查看ContentResolver的使用方法。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Globals.init(this);
// 设置默认使用的布局文件
setContentView(R.layout.activity_main);
// 取得核心对象
ContentResolver resolver = getContentResolver();
// 根据一个唯一的标识,来调用某些数据库操作.
Cursor c = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
null, null, null, null);
if (c.moveToFirst()) {
while (!c.isAfterLast()) {
String album = c.getString(c.getColumnIndex(Video.Media.ALBUM));
String artist = c.getString(c.getColumnIndex(Video.Media.ARTIST));
String fileName = c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME));
String name = c.getString(c.getColumnIndex(Video.Media.TITLE));
String duration = c.getString(c.getColumnIndex(Video.Media.DURATION));
String path = c.getString(c.getColumnIndex(Video.Media.DATA));
MediaPlayer player = new MediaPlayer();
System.out.println(album + " --> " + artist + " --> " + name
+ " --> " + duration + " --> " + path + " --> " + fileName);
c.moveToNext();
}
}
c.close();
}
}