读取系统联系人,添加联系人,删除联系人,修改联系人
ContentProvider读取电话号码的Uri:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
ContentProvider扫描本地图片路径Uri:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
ContentProvider扫描本地视频文件的URI:MediaStore.Video.Media.EXTERNAL_CONTENT_URI
ContentProvider扫描本地音频文件的URI: MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
读取联系人需添加读取联系人的权限: <uses-permission android:name="android.permission.READ_CONTACTS"/>
添加联系人需添加写入联系人的权限: <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
一个程序,获取另一个程序的一些信息,需要用到contentprovider内容提供者来实现数据的获取与操作,获取系统的联系人的话,系统已经定义好了一些配备规则,自己可以参照Android系统源码,进行查看。
第一种读取联系人的方法:
ContentResolver resolver = getContentResolver();
// 通过查看源码得到通讯录raw_contacts表的匹配规则
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri uri2 = Uri.parse("content://com.android.contacts/data");
Cursor cursor = resolver.query(uri, null, null, null, null);
// 创建一个容器
ArrayList<Contact> list = new ArrayList<Contact>();
// 循环的是raw_contacts表
while (cursor.moveToNext()) {
// 获取的是联系人的id
String _id = cursor.getString(cursor.getColumnIndex("contact_id"));
if (_id == null) {
continue;
}
Cursor cursorData = resolver.query(uri2, null, "raw_contact_id=?",
new String[] { _id }, null);
Contact contact = new Contact();
// 循环的是data表
while (cursorData.moveToNext()) {
// 得到的是联系人的数据 电话、邮箱存在data1
String content = cursorData.getString(cursorData
.getColumnIndex("data1"));
String mimetype = cursorData.getString(cursorData
.getColumnIndex("mimetype"));
if (mimetype.equals("vnd.android.cursor.item/name")) {
contact.setName("姓名:" + content);
} else if (mimetype.equals("vnd.android.cursor.item/phone_v2")) {
contact.setPhone("电话:" + content);
} else if (mimetype.equals("vnd.android.cursor.item/email_v2")) {
contact.setEmail("邮箱:" + content);
}
}
list.add(contact);
}
第二种读取联系人的方法:
这种发法,用的是已经封装好的类进行调用,来实现读取联系人的操作,比较简单
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
StringBuffer sb = new StringBuffer();
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
sb.append("姓名:"+name+"电话:"+phone);
}
添加联系人的方法:
ContentResolver resolver = getContentResolver();
//通过查看源码得到通讯录raw_contacts表的匹配规则
Uri rawUri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor rawCursor = resolver.query(rawUri, null, null, null, null);
rawCursor.moveToLast();
int id = rawCursor.getInt(rawCursor.getColumnIndex("contact_id"));
id = id + 1;
//往raw_contacts表中添加一个联系人id
ContentValues values = new ContentValues();
values.put("contact_id", id);
resolver.insert(rawUri, values);
//往data表中添加数据
ContentValues phoneValues = new ContentValues();
phoneValues.put("data1", "13546789");
phoneValues.put("raw_contact_id", id);
phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");
resolver.insert(dataUri, phoneValues);
ContentValues emailValues = new ContentValues();
emailValues.put("data1", "wangwu@qq.com");
emailValues.put("raw_contact_id", id);
emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");
resolver.insert(dataUri, emailValues);
ContentValues nameValues = new ContentValues();
nameValues.put("data1", "wangwu");
nameValues.put("raw_contact_id", id);
nameValues.put("mimetype", "vnd.android.cursor.item/name");
resolver.insert(dataUri, nameValues);
删除联系人的方法:
删除联系人,需将raw_contact表中的id删除与data表中的数据要删除 Uri contactsUri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
//删除联系人id
getContentResolver().delete(contactsUri,"contact_id = ?", new String[]{"6"});
//删除联系人data表中的数据
getContentResolver().delete(dataUri, "raw_contact_id = ?", new String[]{"6"});
修改联系人的方法:
Uri dataUri = Uri.parse("content://com.android.contacts/data");//contact_id
Cursor cursor = getContentResolver().query(dataUri, null, "raw_contact_id = ?", new String[]{"7"}, null);
//遍历
while(cursor.moveToNext()){
String mimetype = cursor.getString(cursor.getColumnIndex("mimetype"));
//判断用户的数据类型
if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
ContentValues values = new ContentValues();
values.put("data1", "123654");
getContentResolver().update(dataUri, values, "raw_contact_id = ? and mimetype = ?", new String[]{"7",mimetype});
}else if("vnd.android.cursor.item/name".equals(mimetype)){
//更新联系人的名字
}
}