未能使用ContentProviderOperation删除整个联系人

时间:2010-06-17 03:05:13

标签: android contacts

我一直在使用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 });

没有效果。

这是否意味着只能通过名称而不是ID来删除联系人? 我该怎么做才能删除联系人?

谢谢, Enchor

1 个答案:

答案 0 :(得分:1)

您正试图通过从Data表中删除其数据行来删除联系人。 这不会起作用。

联系人由多个原始联系人组成,每个原始联系人的数据都保存在Data表中。 删除联系人时,所有原始联系人及其数据也会被删除。

这样做:

long contactId = 12345;
Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, String.valueOf(contactId));
int deleted = getContentResolver().delete(contactUri, null, null);
如果操作成功,

删除将为1。