作用:数据提供,并可提供应用程序之间的数据共享,通过Uri访问
使用系统自带的ContentProvider
1、调用Activity自带的方法getContentResolver();获得ContentResolver对象
2、调用ContentResolver的四个方法:增删改查
代码实现查询手机上的id和联系人:
ContentResolver cr = getContentResolver();
//调用ContentResolver提供的四个方法:增删改查
Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME},
null, null, null);
if(c!=null){
while(c.moveToNext()){
//ContactsContract.Contacts._ID
System.out.println(c.getInt(c.getColumnIndex("_id"))); System.out.println
(c.getString(
c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
}
//取出系统自带属性,可以在ContactsContract.Contacts.列名中查找
由于id是唯一的,而号码是和他一一对应。所以应当用id差号码,若直接查会导致顺序错误
要查找电话号码,应当如下写:
int id = c.getInt(c.getColumnIndex("_id"));
Cursor c1 = cr.query(Phone.CONTENT_URI, new String[]{
Phone.NUMBER,Phone.TYPE
}, Phone.CONTACT_ID+"="+id, null, null);
if(c1!=null){
while(c1.moveToNext()){
int phone = c1.getInt(c1.getColumnIndex(Phone.TYPE));
if(phone == Phone.TYPE_HOME){
System.out.println("家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
}else if(phone == Phone.TYPE_MOBILE){
System.out.println("手机:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
}
}
}
c1.close();
若是查询邮箱,则根据id继续查询邮箱地址,原因同上,id唯一,而其他的可能相同:
Cursor c2 = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[]{ContactsContract.CommonDataKinds.Email.DATA,ContactsContract.CommonDataKinds.Email.TYPE},
ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+id, null, null);
然后遍历输出
要想插入一条记录,需进行如下操作:
ContentResolver cr1 = getContentResolver();
ContentValues cvs = new ContentValues();
Uri uri = cr1.insert(RawContacts.CONTENT_URI, cvs);
Long raw_contact_id = ContentUris.parseId(uri);
cvs.clear();
cvs.put(StructuredName.RAW_CONTACT_ID, raw_contact_id);
cvs.put(StructuredName.DISPLAY_NAME, "梁东升");
cvs.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
uri = cr1.insert(Data.CONTENT_URI, cvs);
//插入电话
cvs.clear();
cvs.put(Phone.RAW_CONTACT_ID, raw_contact_id);
cvs.put(Phone.NUMBER, "13971600604");
cvs.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
uri = cr.insert(Data.CONTENT_URI, cvs);
自定义ContentProvider:
1、继承抽象类ContentProvider,实现一系列对数据增删改查的方法
2、需要在AndroidManifest.xml里面对ContentProvider进行注册