android联系人同步相关随笔

最近在做联系人同步,整个过程苦不堪言,遇到了很多问题,收集起来作为日后备查吧。

另外,google的通讯录同步算是最牛逼的了,试用了国内的一些同步工具包括百度云、qq同步助手都有很大的缺陷,就不慢慢展开了。也许是因为android本身的数据库是由google建的,可以方便的为自己的联系人增加同步字段,而第三方开发者只能使用提供的API所致?

------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于新建联系人,其中的withValueBackReferen查了很多资料也没搞清到底是怎么回事,现在基本知道怎么用,也是一知半解,原链接http://stackoverflow.com/questions/4655291/semantics-of-withvaluebackreference,大意是新增联系人的时候怎么将Raw Contact与具体数据表Data相关联起来,本来纳闷的是新增取不回新增联系人的ID,总不会让我去找数据库最后一条记录吧,国内以及android文档中的写法都没有这么清除,现在把自己的解决方案贴出来,其实原帖中也是有的。

		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
		ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
				.withValue(RawContacts.ACCOUNT_TYPE, null)
				.withValue(RawContacts.ACCOUNT_NAME, null).build());
		ops.add(ContentProviderOperation
				.newInsert(ContactsContract.Data.CONTENT_URI)
				.withValueBackReference(Data.RAW_CONTACT_ID, 0)
				.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
				.withValue(StructuredName.DISPLAY_NAME, name).build());
		try {
			ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
			long id = ContentUris.parseId(results[0].uri);
		} catch (Exception e) {
			e.printStackTrace();
		}

 其中result[0]是插入RawContact所返回的Uri,而result[1]是插入Data返回的Uri。可以自行观察数据库变化,拿到Id就方便多了。

转载于:https://www.cnblogs.com/ivanchou/p/3580320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值