在联系人插入上获取Contact_ID

时间:2012-03-27 12:56:32

标签: android contactscontract

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

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

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

所以我来到ContactsContract.Data,通过Contact_ID显然可以更新旧的phonenumber。

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吗?

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

2 个答案:

答案 0 :(得分:0)

当然可以!这是:

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

答案 1 :(得分:0)

更好的方法,你得到_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();
}

它对我有用。