通过ContemtProvider对android联系人实现增删改查

思路:

通过android提供的联系人相关的ContentProvider,通过提供的专门的url,来实现相关的增删改查。

准备工作:

Android的联系人是以sqlite数据库的形式存储在手机内部存储/data/data/com.android.providers.contacts/contacts2.ab中。

我们可以直接使用Android已经为我们提供的url来获取对联系人信息的操作权限。URL:ContactsContract.Contacts.CONTENT_URI

我们通过ContentResolver类获取ContentProvider提供的联系人数据。context里的getContentResolver()方法可以获得这个类。

相关代码:

public static List<contact> getAllContacts(Context context) {
		List<contact> list=new ArrayList<contact>();
		//利用系统的ContentProvider来查询联系人信息
		//数据来自contacts,data表
		ContentResolver cr = context.getContentResolver();
		String[] projection = new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.PHOTO_ID};
		Cursor c= cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);
		//遍历从contacts数据表中取出的数据集
		while(c.moveToNext()){
			Contact contact = new Contact();
			int id = c.getInt(0);
			contact.set_id(id);
			contact.setPhoto_id(c.getInt(1));
			//利用联系人的_id,到data数据表中继续查询
			ContentResolver cr2 = context.getContentResolver();
			Cursor c2 = cr2.query(
					ContactsContract.Data.CONTENT_URI, 
					new String[]{Data.MIMETYPE,Data.DATA1}, 
					Data.RAW_CONTACT_ID+" = ?", 
					new String[]{String.valueOf(id)},
					null);
			//从从data表中取回的,特定id联系人的具体数据集
			while(c2.moveToNext()){
				String mimeType = c2.getString(0);
				if(mimeType.equals("vnd.android.cursor.item/email_v2")){
					contact.setEmail(c2.getString(1));
				}
				if(mimeType.equals("vnd.android.cursor.item/name")){
					contact.setName(c2.getString(1));
				}
				if(mimeType.equals("vnd.android.cursor.item/phone_v2")){
					contact.setPhone(c2.getString(1));
				}
				if(mimeType.equals("vnd.android.cursor.item/postal-address_v2")){
					contact.setAddress(c2.getString(1));
				}
			}
			c2.close();
			//对于只有号码没有姓名的联系人做一个处理
			if(TextUtils.isEmpty(contact.getName())){
				contact.setName(contact.getPhone());
			}

			list.add(contact);
		}
		c.close();
		return list;
	}
这样就把联系人查到,赋值给实体类,保存到list集合里面。</contact></contact></contact>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值