在Android 2.1 update 1中添加重复的联系人字段时,我有一个很大的问题
请看一下我的代码:
ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
// first and last names
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "MyFirstName")
.withValue(StructuredName.FAMILY_NAME, "MyLastName")
.build());
try{
ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list);
}catch(Exception e){
e.printStackTrace();
}
尝试在20次迭代循环中运行这段代码,然后转到联系人应用程序 你会看到只有8个联系人! 当我插入重复的电子邮件,电话,组织时也会发生此问题。 尝试在0-> 200的循环中,android会变得疯狂!
我的代码有问题吗?对此有什么解决方案吗?
任何帮助都会非常感激... 谢谢!
答案 0 :(得分:9)
经过2个非休眠日...重读我的代码并重写我的课程 我找到了解决方案:有一个我不知道的列,它甚至不存在于早期的API中:AGGREGATION_MODE
所以解决方案原来是这样的:
ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
.build());
// first and last names
op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "MyFirstName")
.withValue(StructuredName.FAMILY_NAME, "MyLastName")
.build());
try{
ContentProviderResult[] results = cResolver.applyBatch(ContactsContract.AUTHORITY, op_list);
}catch(Exception e){
e.printStackTrace();
}
答案 1 :(得分:1)
联系人在新的api中合并(sdk> 2.0)。
属于特定规则集的所有联系人都会自动合并,以在联系人列表中显示单个联系人。
这套规则包括 1.具有相同名字和姓氏的联系人。 2.具有相同邮件ID的联系人。 3.联系人姓名和电话号码匹配......等。
在“显示联系人详细信息”屏幕中,重复项不可见。 如果您尝试编辑联系人,则会找到您输入的联系人的所有实例。 (即如果输入联系人10次,则可以一个接一个地看到10个不同的实例。)您可以编辑那里的任何特定联系人。
由于Android 2.0支持多个帐户,因此该方案将存在。
答案 2 :(得分:0)
你应该尝试使用ContentResolver直接插入,也许它会有所帮助(我没有尝试插入20次相同的联系人,所以我不知道它是否会有任何区别)