在向现有联系人添加新号码时选择正确的rawContactID

时间:2012-11-15 13:20:35

标签: android api android-contacts contactscontract rawcontactid

我正在构建自定义电话簿应用程序。作为其中一部分,我需要在现有联系人下添加新联系人或其他信息(电话号码或电子邮件)。虽然这在简单的测试用例下运行良好,但在某些情况下(并不是很明显)我最终会遇到两个问题:

  1. 创建了一个联系人的多个副本,通常是数百个!这些都是空白的,只是与修改后的原始联系人共享相同的显示名称

  2. 联系人下的多个号码(完全相同)。非常不寻常的是这些数字在contactContracts.Data表中具有相同的_ID,因此无法理解如何使用相同的唯一ID来存在多个实例。我检查了它是否是显示问题,但似乎不是

  3. 如果我正确插入信息,上述两个都让我有疑问。所以我想知道的是:

    1. 创建新联系人时,是否应该指定默认的account_name和account_type?我目前正在使用null

    2. 当我向现有联系人添加新电话号码时,将数据插入contactContracts.Data表的正确方法是什么?我目前正在使用rawContactID作为引用ID插入此数字,我从contactContracts.RawContacts表中获取此rawContactID,方法是使用我的联系人的contactID作为参考。请注意,因为我经常会收到多个原始联系人,所以我最终会选择最后一个(任意选择)来填写我的电话号码。

1 个答案:

答案 0 :(得分:2)

您可以使用AccountManager类获取帐户名称和帐户类型信息。

    final AccountManager accountTypes = AccountManager.get(getApplicationContext());
    final Account accounts[] = accountTypes.getAccounts();
    for (final Account account: accounts) {
        Log.i(TAG, account.name);
    }