从通讯录中导入联系人并去重

首先给出实现完的界面图




上面是给出来的实现结果图。

从本地联系人中导出联系人,需要使用ContentProvider来获取通讯录中的联系人。

从通讯录中获取联系人方法如下:

/** 得到手机通讯录联系人信息 **/
	private void getPhoneContacts() {

		ContentResolver resolver = ContactsActivity.this.getContentResolver();

		// 获取手机联系人
		Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,
				null, null, null, null);

		if (cursor != null) {
			while (cursor.moveToNext()) {
				// 查看联系人有多少个号码,如果没有号码,返回0
				int idColumn = cursor
						.getColumnIndex(ContactsContract.Contacts._ID);
				int phoneCount = cursor
						.getInt(cursor
								.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
				int displayNameColumn = cursor
						.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
				// 得到联系人名称
				String contactName = cursor.getString(displayNameColumn);

				// 获得联系人的ID
				String contactId = cursor.getString(idColumn);
				List<String> list = new ArrayList<String>();
				if (phoneCount > 0) {
					// 获得联系人的电话号码列表
					Cursor phoneCursor = getContentResolver().query(
							ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
							null,
							ContactsContract.CommonDataKinds.Phone.CONTACT_ID
									+ "=" + contactId, null, null);
					if (phoneCursor.moveToFirst()) {
						do {
							// 遍历所有的联系人下面所有的电话号码
							String phoneNumber = phoneCursor
									.getString(phoneCursor
											.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
							// 去掉手机号中的空格和“-”
							phoneNumber = phoneNumber.replace(" ", "")
									.replace("-", "").replace("+86", "");
							if (DataTools.isMobileNO(phoneNumber)) {
								if (!list.contains(phoneNumber)) {
									list.add(phoneNumber);
								}
							}

						} while (phoneCursor.moveToNext());
					}
					phoneCursor.close();
				}
				// //得到手机号码
				// String phoneNumber = cursor.getString(PHONES_NUMBER_INDEX);
				// 当手机号码为空的或者为空字段 跳过当前循环
				if (list.size() > 0) {
					if (!maps.containsKey(contactId)) {// 所有联系人放到maps中,
						ContactBean bean = new ContactBean();
						bean.setContactName(contactName);
						bean.setContactNum(list);
						bean.setCheck(false);
						maps.put(contactId, bean);
					}
				}
			}

			cursor.close();
		}
		if (maps.size() > 0) {// 有数据
			handler.sendEmptyMessage(1);
		} else {
			handler.sendEmptyMessage(0);
		}
	}
实体ContactBean类

public class ContactBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String contactName;
	private List<String> contactNum;
	private boolean isCheck;
	private int positon = -1;

	private String addr;

	public String getContactName() {
		return contactName;
	}

	public void setContactName(String contactName) {
		this.contactName = contactName;
	}

	public List<String> getContactNum() {
		return contactNum;
	}

	public void setContactNum(List<String> contactNum) {
		this.contactNum = contactNum;
	}

	public boolean isCheck() {
		return isCheck;
	}

	public void setCheck(boolean isCheck) {
		this.isCheck = isCheck;
	}

	public int getPositon() {
		return positon;
	}

	public void setPositon(int positon) {
		this.positon = positon;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

}


存储数据的几个对象:
// 联系人一对一
private HashMap<String, ContactBean
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值