Android:插入后获取联系人ID

use*_*179 5 android contacts android-contacts

我需要在创建新联系人后存储联系人ID值,以便能够在其他时刻引用它.例如,我创建了一个新联系人,之后我想从其联系人ID中删除它,因此我需要在创建新联系人后检索联系人ID值.这是我创建新联系人的方式:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, tipoCuenta).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, cuenta).build());

//Insert some data here....

c.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

//Here, I want to retrieve contact id
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

小智 8

改进 matiash 答案:

ContentResolver.applyBatch ()方法返回一组ContentProviderResult对象,每个操作对应一个对象。如果您的第一个操作添加 RawContact,则结果数组的第一个元素将包含添加的 RawContact 的 uri(格式为 content://com.android.contacts/raw_contacts/[raw_contact_id])。

如果您对 raw_contact_id 感兴趣,那么以下内容就足够了:

    final ContentProviderResult[] results = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
    long rawContactId = ContentUris.parseId(results[0].uri);
Run Code Online (Sandbox Code Playgroud)

但某些设备上的 raw_contact_id 可能与 contact_id 不同 - 为了获取 contact_id,您必须执行以下操作:

    final ContentProviderResult[] results = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
    final String[] projection = new String[] { ContactsContract.RawContacts.CONTACT_ID };
    final Cursor cursor = contentResolver.query(results[0].uri, projection, null, null, null);
    cursor.moveToNext();
    long contactId = cursor.getLong(0);
    cursor.close();
Run Code Online (Sandbox Code Playgroud)


mat*_*ash 7

所述ContentResolver.applyBatch()方法返回的数组ContentProviderResult目的,一个用于每个操作.其中每个都有插入联系人的uri(格式content://com.android.contacts/raw_contacts/<contact_id>).

因此,要获得联系人的ID,您只需解析此uri,即

ContentProviderResult[] results = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
int contactId = Integer.parseInt(results[0].uri.getLastPathSegment());
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用 ContentUris.parseId(contentProviderResult.uri); 从 ContentProvider 获取资源的 id。 (2认同)
  • 对于不知情的人。此解决方案返回 RAW_CONTACT_ID,而不是 CONTACT_ID。 (2认同)