Android系统中提供了很多预定义的Content Provider(声音,图片,视频,联系人等),开发人员可以通过查询这些provider以获得其中包含的信息。
Browser | 读取或者需改书签 浏览历史或网络搜索 |
CallLog | 查看和更新通话记录 |
Contacts | 获取,修改或保存联系 人信息 |
MediaStore | 访问声音、视频、音乐 |
Setting | 查看获取蓝牙设置、铃声等其他设置 |
在实际的操作中,我们通常不会直接对Content Provider直接进行操作,而是通过对ContentResolver对象进行操作,开发人员可以通过调用Activity或其他应用程序组件的实现类中的getContentResolver()方法来获得ContentProvider对象
ContentResolver cr = getContentResolver();
通过对cr的操作来实现数据的操作
1.查询
cr.query();
返回的对象为一个游标 cursor,它能遍历各行各列来读取各个字段的值。
2.增加
cr.insert();
传递provider的URL参数和ContentValues映射,该方法的返回新纪录的完整URL
3.更新
cr.update();
需要提供需要修改的列名、值
4.删除
cr.delete();
如果删除单行,可以调用ContentProvider.delete()方法并提供特定行的URL
如果删除多行,可以结合SQLWHERE语句进行操作。
例子:查询手机联系人的电话和姓名
在MainActivity中创建如下的方法,用于获取用户的数据信息
private String getQueryData(){
StringBuilder sb = new StringBuilder();//用于保存字符串
ContentResolver resolver = getContentResolver();//获得ContentResolver对象
Cursor cursor = resolver.query(Contacts.CONTENT_URL,null,ull,null,null);查询记录,参数为查询的条件等
while(cursor.moveToNext()){
int idIndex = cursor.getColumnIndex(Contacts._ID);//获取ID值的索引
int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);//获取姓名索引
int id = cursor.getInt(idIndex);//获取id,通过索引获取相应的值
String name = cursor.getString(displayNameIndex);
Cursor phone = resolver.query(Phone.CONTENT_URL,null,Phone.CONTENT._ID+"="+id,null,null);
while(phone.moveToNext()){
int phoneNumberIndex = phone.getColumnIndex(Phone.NUMBER);
String number = Phone.getString(phoneNumberIndex);
sb.append(name+":"+number+"\n");
}
}
cursor.close();
return sb.toString();
}