的Android不添加的所有联系人与重复字段

的Android不添加的所有联系人与重复字段

问题描述:

我有一个大touble中的Android 2.1更新添加重复的联系人字段时1的Android不添加的所有联系人与重复字段

请看看我的代码:

 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会发疯!

我的代码有问题吗?有没有解决这个问题的方法?

任何帮助将非常感谢... 谢谢!

后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(); 
     } 
+0

谢谢你!终于获得了地址簿中添加的联系人! – Ads 2010-12-10 06:05:55

+0

.... ur welcome :) – Shatazone 2010-12-12 22:17:16

+0

你是我的英雄!!!另一个经典的Android上非常差的文档例子... bha!再次感谢你。 – 2013-12-07 17:52:22

你应该尝试直接插入了ContentResolver的,也许这将有助于(我还没有尝试插入20倍相同的接触,所以我不知道这是否会令任何区别)

+0

生病现在试试... – Shatazone 2010-11-14 02:02:27

+0

好吧...它没有工作...相同的结果 – Shatazone 2010-11-14 02:19:59

+0

奇怪的...解释这一点:当你尝试20多岁,你得到你的8,如果你再次运行应用程序可以您是否再添加一些记录? – apps 2010-11-14 02:23:49

联系人被合并到新的api中(sdk> 2.0)。

所有属于特定规则集的联系人都会自动合并,以显示联系人列表中的单个联系人。

这组规则包括 1.具有相同名字和姓氏的联系人。 2.具有相同邮件ID的联系人。 3.联系人姓名和电话号码匹配...等。

在显示联系人详细信息屏幕中,重复项不可见。 如果您尝试编辑联系人,您会发现您输入的联系人的所有实例。 (即,如果输入了一个联系人10次,则可以依次看到10个不同的实例)。您可以在其中编辑任何特定的联系人。

由于Android 2.0支持多个帐户,因此该场景将存在。