【问题标题】:Failure to delete entire contact using ContentProviderOperation无法使用 ContentProviderOperation 删除整个联系人
【发布时间】:2010-06-17 03:05:13
【问题描述】:

我一直在使用 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 来删除联系人? 我到底该怎么做才能删除联系人?

谢谢, 锚定

【问题讨论】:

  • 您必须运行同步过程,以便它使用 Google 通讯录进行更新,而不是永久删除。检查已删除的标志。
  • “你必须运行一个同步过程”我不知道该怎么做。你能告诉我如何运行同步过程吗?请告诉我我可以阅读什么文档或给我一些示例代码。非常感谢。
  • @Enchor 你的问题解决了吗?我现在也在苦苦挣扎。

标签: android contacts


【解决方案1】:

您正试图通过从Data 表中删除其数据行来删除联系人。 那是行不通的。

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

这样做:

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

如果操作成功,deleted 将为 1。

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2018-02-15
    • 2016-09-19
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多