如何删除联系人详细信息?

时间:2017-10-17 21:26:42

标签: android android-contacts

我正在尝试从android中的联系人中删除详细信息。 例如,联系人有电子邮件和电话号码,假设我想删除电话号码。 假设我已经拥有上一个查询中详细信息的ID。

我的搜索只找到了与删除整个联系人相关的主题,这对我来说很有用。 这是关于仅删除详细信息,即从 ContactsContract.Data 表中删除。

我的代码中的相关部分粘贴在下面,ID已经知道了。 日志消息报告已成功删除1个条目,这是我的预期。 但是,当我切换到联系人应用程序时,细节仍然存在。即使从头开始重新启动该应用程序。 所以某些东西似乎仍未正确更新。

感谢您的帮助

private void deleteDetail(ContactDetail detail) {
    Uri detailsUri = ContactsContract.Data.CONTENT_URI;

    String selection = ContactsContract.Data._ID + " = ?";
    String[] selectionArgs = { String.valueOf(detail.getID()) };

    int result = 0;
    try {
        result = mProvider.delete(detailsUri, selection, selectionArgs);
    } catch (RemoteException e) {
        e.printStackTrace();
    }
    Log.d(LOGTAG, "deleteDetail() - id=" + detail.getID() + ", deleted "+result+" entries");
}

1 个答案:

答案 0 :(得分:0)

您的代码似乎没问题,可以解释的是,该联系人的详细信息中存在多一次该手机。

例如,如果您有WhatsappViber或任何其他基于电话的消息传递应用,他们会为每个有电话号码的联系人添加RawContact重复的电话号码数据行,以及其他一些应用程序特定的详细信息。

这可能是因为RawContact加入了包含您尝试删除的手机的Contact的{​​{1}}。

如果您确实要永久删除详细信息,可以执行以下操作:

private void deleteDetail(long contactId, String phoneNumber) {
    Uri dataUri = Data.CONTENT_URI;

    String selection = Data.CONTACT_ID + " =? AND " + CommonDataKinds.Phone.NUMBER + " = ?";
    String[] selectionArgs = { String.valueOf(contactId), phoneNumber };

    try {
        int result = mProvider.delete(dataUri, selection, selectionArgs);
        Log.d(LOGTAG, "deleteDetail() - deleted: " + result + " entries");
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

请注意,这将进行精确的手机比较,因此,如果您为该联系人保存了两部手机,使用不同的格式(短划线,国家/地区代码等),则不会与所有手机相匹配。 如果您定位Android Jelly Beans及以上版本,则可以使用CommonDataKinds.Phone.NORMALIZED_NUMBER并将其与所请求电话号码的E164格式进行比较(请参阅this