android读取通讯录和写入通讯录

  前几天,我爸换了一个新的手机,然后通讯录就要转移到新的手机上,作为一个爱折腾的我就有点按耐不住了,于是就想做一个转移通讯录的小程序,我用的方法是老手机先将通讯录的内容传到服务器上的sql server数据库中,然后新手机获取数据库中的内容,这样就完成了转移,读写联系人也是参照网上的代码,我就把我的核心代码分享一下,方便以后巩固.

  获取通讯录联系人和号码存入到一个list中:

  

	mList.clear();
		ContentResolver resolver = this.getContentResolver();
		Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
				PHONES_PROJECTION, null, null, null);
		if (phoneCursor != null) {
			while (phoneCursor.moveToNext()) {
				// 获取手机号码
				String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
				if (TextUtils.isEmpty(phoneNumber)) {
					continue;
				}
				Contacts contacts = new Contacts();
				// 得到联系人
				String phoneName = phoneCursor
						.getString(PHONES_DISPLAY_NAME_INDEX);
				contacts.phone_Name = phoneName;
				contacts.phone_Telephone = phoneNumber;
				mList.add(contacts);
			}
		}

Phones_Projection数组,PHONES_DISPLAY_NAME_INDEX和PHONES_NUMBER_INDEX常量:

	private static final String[] PHONES_PROJECTION = new String[] {
			Phone.DISPLAY_NAME, Phone.NUMBER };
	/** 联系人显示名称 **/
	private static final int PHONES_DISPLAY_NAME_INDEX = 0;

	/** 电话号码 **/
	private static final int PHONES_NUMBER_INDEX = 1;



就是查找联系人和电话这两列,因为他们本质上都是存在sqlite数据库中的

写入通讯录:

private void addContact(String lianxiren, String telephone) {
		ContentResolver resolver = getContentResolver();
		ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
		// 下面的操作会根据表中已有的id使用情况自动生成新联系人的一行
		ContentProviderOperation op1 = ContentProviderOperation
				.newInsert(ContactsContract.RawContacts.CONTENT_URI)
				.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
				.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
				.build();
		operations.add(op1);
		// 添加联系人
		ContentProviderOperation op2 = ContentProviderOperation
				.newInsert(ContactsContract.Data.CONTENT_URI)
				.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
				.withValue(
						ContactsContract.Data.MIMETYPE,
						ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
				.withValue(
						ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
						lianxiren).build();
		operations.add(op2);
		// 添加联系电话
		ContentProviderOperation op3 = ContentProviderOperation
				.newInsert(ContactsContract.Data.CONTENT_URI)
				.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
				.withValue(
						ContactsContract.Data.MIMETYPE,
						ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
				.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
						telephone)
				.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
						ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
				.build();
		operations.add(op3);

		try {
			resolver.applyBatch(ContactsContract.AUTHORITY, operations);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值