Android 获取手机的联系人进行操作

通过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);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值