使用ContentProvider添加获取通讯录信息

1、实现代码

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.util.Log;

public class MainActivity extends Activity {

	@SuppressLint("SdCardPath")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		ContentResolver cr = getContentResolver();
		//向联系人中插入一条数据
		ContentValues values = new ContentValues();
		Uri uri = cr.insert(RawContacts.CONTENT_URI, values);
		//解析uri
		Long raw_contacts_id = ContentUris.parseId(uri);
		values.clear();
		//插入人名,指定联系人和插入行
		values.put(StructuredName.RAW_CONTACT_ID, raw_contacts_id);
		//追加插入联系人信息
		values.put(StructuredName.DISPLAY_NAME, "张三");
		values.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		uri = cr.insert(Data.CONTENT_URI, values);
		
		//插入电话信息
		values.clear();
		values.put(Phone.RAW_CONTACT_ID, raw_contacts_id);
		values.put(Phone.NUMBER, "123434556456");
		values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
		uri = cr.insert(Data.CONTENT_URI, values);
		
		
		//查询通讯录数据
		Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, new String[]{Contacts._ID, Contacts.DISPLAY_NAME}, null, null, null);
		if(c != null){
			while (c.moveToNext()) {
				//如果不知道对应字段名称可以写成Contacts._ID和Contacts.DISPLAY_NAME
				int id = c.getInt(c.getColumnIndex("_id"));
				Log.e(">>>>>>>>>>>>", "_id" + id);
				Log.e(">>>>>>>>>>>>", "name" + c.getString(c.getColumnIndex("display_name")));
				
				//查询联系人电话号码,必须使用ID获取。通过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 type = c1.getInt(c1.getColumnIndex(Phone.TYPE));
						if(type == Phone.TYPE_HOME){
							Log.e(">>>>>>>>>>>>", "家庭电话:" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
						}else if (type == Phone.TYPE_MOBILE){
							Log.e(">>>>>>>>>>>>", "手机:" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
						}
					}
					c1.close();
				}
				
				//根据联系人id查询出联系人的邮箱地址
				Cursor c2 = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, new String[]{Email.DATA, Email.TYPE}, Email.CONTACT_ID + "=" + id, null, null);
				if(c2 != null){
					while (c2.moveToNext()) {
						int type = c2.getInt(c2.getColumnIndex(Email.TYPE));
						if(type == Email.TYPE_WORK){
							Log.e(">>>>>>>>>>>>", "工作邮箱:" + c2.getString(c2.getColumnIndex(Email.DATA)));
						}
					}
					c2.close();
				}
			}
		}
		c.close();
	}
}

2、添加权限




下载源码

你可能感兴趣的:(详解案例)