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)
所述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)
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |