Android: получить идентификатор контакта после вставки

Мне нужно сохранить значение идентификатора контакта после создания нового контакта, чтобы иметь возможность ссылаться на него в другой момент. Например, я создаю новый контакт, и после этого хочу удалить его из его идентификатора контакта, поэтому мне нужно получить значение идентификатора контакта после создания нового контакта. Вот как я создаю новые контакты:

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 

Как я могу это сделать?

Метод ContentResolver.applyBatch () возвращает массив объектов ContentProviderResult , по одному для каждой операции. У каждого из них есть uri вставленного контакта (в content://com.android.contacts/raw_contacts/<contact_id> формата content://com.android.contacts/raw_contacts/<contact_id> ).

Таким образом, чтобы получить идентификатор контакта, вам просто нужно проанализировать этот uri, т.е.

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

Здесь код, сжатый, я использовал

  newContactUri = null; try { ContentProviderResult[] res = globalContext.getContentResolver() .applyBatch(ContactsContract.AUTHORITY, ops); if (res != null && res[0] != null) { newContactUri = res[0].uri; /** * als Ergebnis erhaelt man eine URI, mit der man die raw * contact-id auslesen kann. */ if (debug) { Log.d(TAG, "URI added contact:" + res[0].uri.toString() + " l: " + res.length); } subQuery(newContactUri); // setzt contactRawID } else if (debug) Log.e( ....); } catch (Exception e) { if (debug) Log.d( .... ); } 

И это подпрограмма subQuery

 /** * <pre> * nachdem ein user angelegt ist, wird damit * die contactRawID gesetzt * * @param contactUri * ... Ergebnis aus ContentProviderResult * @return void * </pre> */ public void subQuery(Uri contactUri) { if (debug) Log.i(TAG, "subQuery() "); contactRawID = -2; // Content Resolver String contactIdString = null; String displayName = null; ContentResolver contentResolver = globalContext.getContentResolver(); String[] mainQueryProjection = { ContactsContract.RawContacts._ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY }; Cursor subQueryCursor = contentResolver.query(contactUri, mainQueryProjection, null, null, null); if (subQueryCursor != null) { if (debug) Log.d(TAG, "subQueryCursor != null "); while (subQueryCursor.moveToNext()) { contactIdString = subQueryCursor.getString(0); displayName = subQueryCursor.getString(1); } ; try { subQueryCursor.close(); } catch (Exception e) { if (debug) Log.d(TAG, .... ); } contactRawID = Integer.parseInt(contactIdString); } return; } 

Многие извиняются за немецкий текст комментария, но я надеюсь, что это немного поможет