通过ContentResolver来调用系统提供的联系人 ,有需要显示名字,电话号码,邮件。
public class MainActivity extends Activity {
private static final String TAG="MainActivity";
//ContactsContract.contacts.CONTENT_URI
//表示联系人的uri对象 --> content://com.android.contacts/row_contacts
//ContactsContract.CommonDataKinds.phone.CONTENT_URI
//表示电话号码的Uri对象 --> content://com.android.contacts/data/phone
//ContactsContract.CommonDataKinds.Email.CONTENT_URI
//表示电子邮件的Uri对象 --> content://com.android.contacts/data/email
//android.provider.ContactsContract.Data.CONTENT_URI
//表示联系人的data数据表Uri,可以增删查改 -->content://com.android.contacts/data
//联系人的Uri对象(raw_contacts)
private static final Uri contactUri=ContactsContract.RawContacts.CONTENT_URI;
//电话号码的Uri对象(phones)
private static final Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
//电子邮件的Uri对象(emails)
private static final Uri emailUri=ContactsContract.CommonDataKinds.Email.CONTENT_URI;
//data数据表(data)
private static final Uri doUri=android.provider.ContactsContract.Data.CONTENT_URI;
private ContentResolver mContentResolver;
private ListView listview;
private List<Map<String, Object>> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取ContentResolver对象
mContentResolver=getContentResolver();
listview = (ListView) findViewById(R.id.activity_main_listview);
//获取联系人数据源
list=getContactsList();
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,list, R.layout.activity_item, new String[]{"name","phone","email"}, new int[]{R.id.tv_name,R.id.tv_phone,R.id.tv_email});
listview.setAdapter(adapter);
}
/*
* 获取所有的联系人数据
* @return 以map为单位的list数据对象
*/
private List<Map<String, Object>> getContactsList() {
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
//获取raw_contacts表中所有的联系人
Cursor cursor=mContentResolver.query(contactUri, null, null, null, null);
while(cursor.moveToNext()){
Map<String, Object> map=new HashMap<String, Object>();
//获取单个联系人的Id号
long contactId=cursor.getInt(cursor.getColumnIndex("_id"));
//获取单个联系人的名字
String contactName=cursor.getString(cursor.getColumnIndex("display_name"));
map.put("_id", contactId);
map.put("name", contactName);
//根据raw_contact表中的_id来获取当前联系人的电话号码
Cursor phoneCursor = mContentResolver.query(phoneUri, null,"raw_contact_id=?", new String[] {contactId+""}, null);
String phone="";
while(phoneCursor.moveToNext()){
phone=phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER));
Log.i(TAG, "get phone:"+phone);
}
map.put("phone", phone);
//根据raw_contact表中的_id来获取当前联系人的电话邮件
Cursor emailCursor=mContentResolver.query(emailUri, null,"raw_contact_id=?", new String[]{contactId+""}, null);
String email="";
while(emailCursor.moveToNext()){
//获取电子邮件
email=emailCursor.getString(emailCursor.getColumnIndex(Email.ADDRESS));
Log.i(TAG, "get email:"+email);
}
map.put("email", email);
list.add(map);
}
return list;
}
public void onClick(View v){
switch (v.getId()) {
case R.id.btn_add:
insertContacts();
break;
case R.id.btn_update:
updateContacts();
break;
case R.id.btn_delete:
deleteContacts();
break;
}
}
private void deleteContacts() {
int count = mContentResolver.delete(doUri, "_id>?", new String[]{"7"});
if(count>0){
Toast.makeText(getApplicationContext(), "删除成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "删除失败!", Toast.LENGTH_SHORT).show();
}
mContentResolver.delete(contactUri, "_id>?", new String[]{"0"});
}
private void updateContacts() {
ContentValues values=new ContentValues();
values.put(Phone.NUMBER,"22222222222");
int count = mContentResolver.update(doUri, values,"_id=? and mimetype_id=?", new String[]{"1","5"});
if(count>0){
Toast.makeText(getApplicationContext(), "更新成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "更新失败!", Toast.LENGTH_SHORT).show();
}
}
private void insertContacts() {
//插入列为null的一行记录
ContentValues values = new ContentValues();
Uri newUri = mContentResolver.insert(contactUri, values);
//获取当前插入的一条记录的_id值
long newId = ContentUris.parseId(newUri);
values.clear();
//插入一条姓名数据
values.put(Contacts.Data.RAW_CONTACT_ID,newId);
values.put(Contacts.Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.DISPLAY_NAME, "太阳");
mContentResolver.insert(doUri, values);
//插入一条电话号码的记录
values.clear();
values.put(Contacts.Data.RAW_CONTACT_ID, newId);
values.put(Contacts.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "1436457678");
mContentResolver.insert(doUri, values);
//插入一条邮件的记录
values.clear();
values.put(Contacts.Data.RAW_CONTACT_ID, newId);
values.put(Contacts.Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.ADDRESS, "1234456@qq.com");
mContentResolver.insert(doUri, values);
}
}