您的位置:首页 > 移动开发 > Android开发

通过ContemtProvider对android联系人实现增删改查

2016-02-14 20:02 531 查看
思路:

通过android提供的联系人相关的ContentProvider,通过提供的专门的url,来实现相关的增删改查。

准备工作:
Android的联系人是以sqlite数据库的形式存储在手机内部存储/data/data/com.android.providers.contacts/contacts2.ab中。
我们可以直接使用Android已经为我们提供的url来获取对联系人信息的操作权限。URL:ContactsContract.Contacts.CONTENT_URI
我们通过ContentResolver类获取ContentProvider提供的联系人数据。context里的getContentResolver()方法可以获得这个类。
相关代码:

public static List<contact> getAllContacts(Context context) {
List<contact> list=new ArrayList<contact>();
//利用系统的ContentProvider来查询联系人信息
//数据来自contacts,data表
ContentResolver cr = context.getContentResolver();
String[] projection = new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.PHOTO_ID};
Cursor c= cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);
//遍历从contacts数据表中取出的数据集
while(c.moveToNext()){
Contact contact = new Contact();
int id = c.getInt(0);
contact.set_id(id);
contact.setPhoto_id(c.getInt(1));
//利用联系人的_id,到data数据表中继续查询
ContentResolver cr2 = context.getContentResolver();
Cursor c2 = cr2.query(
ContactsContract.Data.CONTENT_URI,
new String[]{Data.MIMETYPE,Data.DATA1},
Data.RAW_CONTACT_ID+" = ?",
new String[]{String.valueOf(id)},
null);
//从从data表中取回的,特定id联系人的具体数据集
while(c2.moveToNext()){
String mimeType = c2.getString(0);
if(mimeType.equals("vnd.android.cursor.item/email_v2")){
contact.setEmail(c2.getString(1));
}
if(mimeType.equals("vnd.android.cursor.item/name")){
contact.setName(c2.getString(1));
}
if(mimeType.equals("vnd.android.cursor.item/phone_v2")){
contact.setPhone(c2.getString(1));
}
if(mimeType.equals("vnd.android.cursor.item/postal-address_v2")){
contact.setAddress(c2.getString(1));
}
}
c2.close();
//对于只有号码没有姓名的联系人做一个处理
if(TextUtils.isEmpty(contact.getName())){
contact.setName(contact.getPhone());
}

list.add(contact);
}
c.close();
return list;
}
这样就把联系人查到,赋值给实体类,保存到list集合里面。</contact></contact></contact>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: