Невозможность удалить весь контакт с помощью ContentProviderOperation

Я работал с контактами Android. Я могу их показать, обновить, но когда я хочу их удалить, они не удаляются полностью. В Контактах приложение отображается как (Неизвестно) без каких-либо данных. Вот мой пример:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
.withSelection(Data.CONTACT_ID + "=?", new String[]{selectedid})
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

Должен ли я сделать что-нибудь еще, чтобы полностью удалить контакт? Кажется, что этот код удаляет информацию в таблице ContactsContract.Data, но не удаляет элемент, связанный с таблицей ContactsContract.Contacts или ContactsContract.RawContacts. Как я могу полностью удалить контакт?

============================================================================

Кроме того, я попробовал устаревший метод. Это дозирует работу, но я не хочу этого делать. Вот пример кода:

ContentResolver contentResolver = m_cContent.getContentResolver();
contentResolver.delete(People.CONTENT_URI, People.NAME + "=?", new String[] { SelectedName });

и если я изменю этот код на

ContentResolver contentResolver = m_cContent.getContentResolver();
contentResolver.delete(ContactsContract.Contacts, ContactsContract.Contacts._ID + "=?", new String[] { Selectedid });

Это не имеет никакого эффекта.

Означает ли это, что контакт можно удалить только по имени, а не по его идентификатору? Что я могу сделать, чтобы удалить контакт?

Спасибо, Энкор


person Enchor    schedule 17.06.2010    source источник
comment
Вам нужно запустить процесс синхронизации, чтобы он обновлялся с контактами Google, а затем был удален навсегда. Проверить наличие удаленного флага.   -  person Pentium10    schedule 17.06.2010
comment
"Вы должны запустить процесс синхронизации" Я не знаю, как это сделать. Можете ли вы сказать мне, как запустить процесс синхронизации? Скажите, пожалуйста, какой документ я могу прочитать или дайте мне пример кода. Большое спасибо.   -  person Enchor    schedule 17.06.2010
comment
@Enchor Ты решил свою проблему? Я сейчас борюсь с тем же.   -  person Piotr Chojnacki    schedule 19.02.2014


Ответы (1)


Вы пытаетесь удалить контакт, удалив его строки данных из таблицы Data. Это не сработает.

Контакт состоит из нескольких необработанных контактов, данные каждого необработанного контакта сохраняются в таблице Data. При удалении контакта все необработанные контакты также удаляются вместе с их данными.

Сделай это:

long contactId = 12345;
Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, String.valueOf(contactId));
int deleted = getContentResolver().delete(contactUri, null, null);

удалено будет 1, если операция прошла успешно.

person marmor    schedule 27.05.2015