增加联系人到通讯录

直接上代码:

管理通讯录的类:ManagerContact.java

 

package com.example.contactdemo;

import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.util.Log;

/**
 * 管理通讯录的类
 * @author Willen
 *
 */


public class ManagerContact {

	// 根据姓名删除联系人
	public void delContact(Context context, String name) {

		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
				new String[] { Data.RAW_CONTACT_ID },

				ContactsContract.Contacts.DISPLAY_NAME + "=?",
				new String[] { name }, null);

		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

		if (cursor.moveToFirst()) {
			do {
				long Id = cursor.getLong(cursor
						.getColumnIndex(Data.RAW_CONTACT_ID));

				ops.add(ContentProviderOperation
						.newDelete(
								ContentUris.withAppendedId(
										RawContacts.CONTENT_URI, Id)).build());
				try {
					context.getContentResolver().applyBatch(
							ContactsContract.AUTHORITY, ops);
				} catch (Exception e) {
				}
			} while (cursor.moveToNext());
			cursor.close();
		}
	}

	// 根据号码删除联系人
	public void delContactByNumber(Context context, String number) {

		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
				new String[] { Data.RAW_CONTACT_ID },

				ContactsContract.Contacts.Data.DATA1 + "=?",
				new String[] { number }, null);

		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

		if (cursor.moveToFirst()) {
			do {
				long Id = cursor.getLong(cursor
						.getColumnIndex(Data.RAW_CONTACT_ID));

				ops.add(ContentProviderOperation
						.newDelete(
								ContentUris.withAppendedId(
										RawContacts.CONTENT_URI, Id)).build());
				try {
					context.getContentResolver().applyBatch(
							ContactsContract.AUTHORITY, ops);
				} catch (Exception e) {
				}
			} while (cursor.moveToNext());
			cursor.close();
		}
	}

	// 根据姓名更新联系人
	public boolean updateContact(Context context, String oldname, String name,
			String phone, String email, String website, String organization,
			String note) {
		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
				new String[] { Data.RAW_CONTACT_ID },

				ContactsContract.Contacts.DISPLAY_NAME + "=?",
				new String[] { oldname }, null);
		if (!cursor.moveToFirst()) {
			return false;
		}
		String id = cursor
				.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
		cursor.close();
		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(

						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?"
								+ " AND " + Phone.TYPE + "=?",
						new String[] { String.valueOf(id),
								Phone.CONTENT_ITEM_TYPE,
								String.valueOf(Phone.TYPE_HOME) })
				.withValue(Phone.NUMBER, phone).build());

		// 更新email
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?"
								+ " AND " + Email.TYPE + "=?",
						new String[] { String.valueOf(id),
								Email.CONTENT_ITEM_TYPE,
								String.valueOf(Email.TYPE_HOME) })
				.withValue(Email.DATA, email).build());

		// 更新姓名
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								StructuredName.CONTENT_ITEM_TYPE })
				.withValue(StructuredName.DISPLAY_NAME, name).build());

		// 更新网站
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Website.CONTENT_ITEM_TYPE })
				.withValue(Website.URL, website).build());

		// 更新公司
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Organization.CONTENT_ITEM_TYPE })
				.withValue(Organization.COMPANY, organization).build());

		// 更新note
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Note.CONTENT_ITEM_TYPE })
				.withValue(Note.NOTE, note).build());

		try {
			context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
					ops);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	// 根据号码更新联系人
	public boolean updateContactByNumber(Context context, String number,
			String name, String phone, String email, String website,
			String organization, String note) {
		Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI,
				new String[] { Data.RAW_CONTACT_ID },
				ContactsContract.Contacts.Data.DATA1 + "=?",
				new String[] { number }, null);
		if (!cursor.moveToFirst()) {
			Log.e("InsertContact", "updateContactByNumber");
			InsertContact(context, name, number);
			return false;
		}
		String id = cursor
				.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
		cursor.close();
		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(

						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?"
								+ " AND " + Phone.TYPE + "=?",
						new String[] { String.valueOf(id),
								Phone.CONTENT_ITEM_TYPE,
								String.valueOf(Phone.TYPE_HOME) })
				.withValue(Phone.NUMBER, phone).build());

		// 更新email
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?"
								+ " AND " + Email.TYPE + "=?",
						new String[] { String.valueOf(id),
								Email.CONTENT_ITEM_TYPE,
								String.valueOf(Email.TYPE_HOME) })
				.withValue(Email.DATA, email).build());

		// 更新姓名
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								StructuredName.CONTENT_ITEM_TYPE })
				.withValue(StructuredName.DISPLAY_NAME, name).build());

		// 更新网站
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Website.CONTENT_ITEM_TYPE })
				.withValue(Website.URL, website).build());

		// 更新公司
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Organization.CONTENT_ITEM_TYPE })
				.withValue(Organization.COMPANY, organization).build());

		// 更新note
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						Data.RAW_CONTACT_ID + "=?" + " AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { String.valueOf(id),
								Note.CONTENT_ITEM_TYPE })
				.withValue(Note.NOTE, note).build());

		try {
			context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
					ops);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	// 添加联系人
	public void InsertContact(Context context, String name, String phone) {
		ContentResolver resolver = context.getContentResolver();
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentValues values = new ContentValues();
		// 向raw_contacts插入一条除了ID之外, 其他全部为NULL的记录, ID是自动生成的
		long id = ContentUris.parseId(resolver.insert(uri, values));
		// 添加联系人姓名
		uri = Uri.parse("content://com.android.contacts/data");
		values.put("raw_contact_id", id);
		values.put("data2", name);
		values.put("mimetype", "vnd.android.cursor.item/name");
		resolver.insert(uri, values);
		// 添加联系人电话
		values.clear(); // 清空上次的数据
		values.put("raw_contact_id", id);
		values.put("data1", phone);
		values.put("data2", "2");
		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
		resolver.insert(uri, values);
	}
	
	//判断联系人是否在通讯录内
	public boolean getContactPeople(Context context,String incomingNumber)
    {
        ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = null;
        
        String[] projection = new String[]
        {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER
        };

        cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, 
        ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]
        { incomingNumber }, "");
        if(cursor.getCount() == 0)
        {
            return true;
        }
        return false;
    }
}


MainActivity.java

 

 

package com.example.contactdemo;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {
	Context context;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		context = this;
		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				ManagerContact managerContact = new ManagerContact();
				String phone = "15992470000";
				if (!managerContact.getContactPeople(context, phone)) {
					Toast.makeText(context, "本地通讯录已包此人信息", Toast.LENGTH_SHORT).show();
				}else {
					managerContact.InsertContact(context, "aa", phone);
					Toast.makeText(context, "添加成功!", Toast.LENGTH_SHORT).show();
				}
				
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}


布局文件只有一个button。资源:http://download.csdn.net/detail/viviwen123/5194623

 

 

posted @ 2013-03-29 13:41  xinyuyuanm  阅读(345)  评论(0编辑  收藏  举报