作用: 主要用于在不同程序之间实现数据共享的功能
ContentResolver的使用:
借助ContentResolver类便可以实现访问内容提供者*享的数据
创建实例:Context.getContentResolver()
- insert()://用于添加数据
- delete()://用于删除数据
- query()://用于查询数据
- update()://用于更新数据
Uri对象
它由两部分组成:权限(authority)+路径(path)
标准格式:content://com.sendi.app.provider/table1
得到uri字符串之后,我们还需将它解析成Uri对象:
Uri.parse(“content://com.sendi.app.provider/table1”);
Uri规则:
content://com.sendi.app.provider/table1/1 :表示访问com.sendi.app这个应用下table表中id为1的数据
“*” :匹配任意长度的任意字符
“#”:匹配任意长度的任意数字
增删改查
- 查询:
Cursor cursor=getContentResolver().query(
uri,
列名,
条件,
where中指定占位符的值,
排序方式);
while(cursor.moveToNext()){
String col1=cursor.getString(cursor.getColumnIndex(“列值1”));
String col2=cursor.getString(cursor.getColumnIndex(“列值2”));
}
cursor.cloase();
添加:
ContentValues values=new ContentValues();
values.put(“c1”,”value1”);
values.put(“c2”,”value2”);
getContentResolver().insert(uri,values);更新:
ContentValues values=new ContentValues();
values.put(“c1”,”value1”);
getCOntentResolver().update(uri,values,”c1=? and c2=?”,new String[]{“text”,”1”});删除:
getContentResolver().delete(uri,”c2=?”,new String[]{“v2”});
自定义内容提供者
- 继承ContentProvider
- 实现方法:onCreate、query、insert、update、delete、getType
- onCreate:内容提供者初始化成功返回true,否则返回false
- query:查询
- insert:插入
- update:更新
- delete:删除
- getType:根据传入的Uri返回相应的类型
注意
需要在清单中注册内容提供者
<provider
android:name="com.sendi.test.MyProvider"
android:authorities="com.sendi.test.provider"
android:exported="true">
</provider>
最后附上获取手机联系人代码
private List<ContactBook> initContactList(List<ContactBook>contactList){
ContentResolver cr=mActivity.getContentResolver();
Cursor cursorContactId=cr.query(Uri.parse("content://com.android.contacts/raw_contacts"),new String[]{"contact_id"},null,null,null);
while (cursorContactId.moveToNext()){
List<String>list=new ArrayList<>();
String contactId=cursorContactId.getString(0);
Cursor cursorData=cr.query(Uri.parse("content://com.android.contacts/data"),new String[]{"data1","mimetype"},
"raw_contact_id=?",new String[]{contactId},null);
while (cursorData.moveToNext()){
String data=cursorData.getString(0);
list.add(data);
Log.i("TEST", "click: "+data);
}
contactList.add(new ContactBook(list.get(1),list.get(0)));
}
cursorContactId.close();
return contactList;
}
记得在清单文件添加权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>