2010-03-22 70 views
1

我读了 ContactsContract.CommonDataKinds.GroupMembership,但我无法弄清楚用什么URI插入。如何将联系人添加到Android上的某个组?

我准备了这个方法:

public static Uri addToGroup(ContentResolver resolver, long personId, 
      long groupId) { 

     ContentValues values = new ContentValues(); 

     values.put(ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID, personId); 

     values.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId); 

     return resolver.insert(uri, values);//URI is not known 

    } 

有人能告诉我什么URI在SDK使用2.0+?

+0

嗨pentium, 也许:Contacts.CONTENT_GROUP_URI? – Sephy 2010-03-22 11:04:34

+0

这是SDK 1.6我需要SDK 2.0 – Pentium10 2010-03-22 11:11:28

+0

实际上,它仍然存在于ContactsContract.Contacts.CONTENT_URI_GROUP为2.0+,你可以在这里看到:http://developer.android.com/reference/android/provider/ContactsContract.Contacts。 html#CONTENT_GROUP_URI 它似乎不被弃用或任何东西...或者我不明白你的问题... – Sephy 2010-03-22 11:20:07

回答

5

我找到了解决,我张贴在这里:

public Uri addToGroup(long personId, long groupId) { 

    //remove if exists 
    this.removeFromGroup(personId, groupId); 

    ContentValues values = new ContentValues(); 
    values.put(ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID, 
      personId); 
    values.put(
      ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, 
      groupId); 
    values 
      .put(
        ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE, 
        ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE); 

    return this.ctx.getContentResolver().insert(
      ContactsContract.Data.CONTENT_URI, values); 

} 

但我不明白的东西,为什么我不得不使用RAW_CONTACT_ID,而不是CONTACT_ID,后来引发NullPointerException异常。

+3

这是因为contact_id是由1个原始联系人组成的“虚拟联系人” - 例如,您的Facebook帐户中的联系人与您的Google联系人列表中的联系人合并,并与您的Twitter帐户中的联系人合并。 ..他们都映射到相同的联系人ID,但是是单独的原始联系人。 – callingshotgun 2011-02-09 17:04:24

相关问题