在插入联系人时获取contact_ID



我目前正在开发一个应用程序,需要将联系人插入手机联系人列表。使用ContactsContract.RawContacts批量插入,我成功地将联系人插入到电话簿中。

http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

然而,当试图更新它们时,他们只是添加更多的电话号码,而不是替换旧的电话号码。

所以我来到了ContactsContract.Data,通过Contact_ID,显然可以在更新时替换旧的电话号码。

http://developer.android.com/reference/android/provider/ContactsContract.Data.html

我现在的问题是,是否可以在插入时检索Contacts_ID?因此,当我插入一个联系人通过这个代码:

ArrayList<ContentProviderOperation> ops =
          new ArrayList<ContentProviderOperation>();
 ...
 int rawContactInsertIndex = ops.size();
 ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
          .withValue(RawContacts.ACCOUNT_TYPE, accountType)
          .withValue(RawContacts.ACCOUNT_NAME, accountName)
          .build());
 ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
          .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
          .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
          .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan")
          .build());
 getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

我会拿回Contacts_ID吗?

提前感谢您能给我的任何帮助。

更好的方法,您可以获得_ID而不是RAW_ID!!

将其添加为静态变量:

static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME,
    ContactsContract.Contacts.STARRED,
    ContactsContract.Contacts.TIMES_CONTACTED,
    ContactsContract.Contacts.CONTACT_PRESENCE,
    ContactsContract.Contacts.PHOTO_ID,
    ContactsContract.Contacts.LOOKUP_KEY,
    ContactsContract.Contacts.HAS_PHONE_NUMBER,
};

然后在插入后添加:

// Displayed name
String displayed_name = "Contact's name goes here";
// Add the new contact
try
{
    context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}
catch (Exception e)
{
    e.printStackTrace();
}
String select = "(" + ContactsContract.Contacts.DISPLAY_NAME + " == "" +displayed_name+ "" )";
Cursor c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
context.startManagingCursor(c);
if (c.moveToNext())
{
    int id = new Integer(c.getString(0)).intValue();
}

它对我有效。

当然可以!这是:

ContentProviderResult[] res;
try
{
    res = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    if (res != null && res[0] != null)
    {
        String uri = res[0].uri.getPath().substring(14);
        int contact_id = new Integer(uri).intValue());
    }
}
catch (RemoteException e)
{
    e.printStackTrace();
}
catch (OperationApplicationException e)
{
    e.printStackTrace();
}

最新更新