Android 在向现有联系人添加新号码时选择正确的原始联系人ID

Android 在向现有联系人添加新号码时选择正确的原始联系人ID,android,api,android-contacts,contactscontract,rawcontactid,Android,Api,Android Contacts,Contactscontract,Rawcontactid,我正在构建一个自定义电话簿应用程序。作为其中的一部分,我需要在现有联系人下添加新联系人或其他信息(电话号码或电子邮件)。虽然这在简单的测试用例下可以很好地工作,但在某些情况下(何时不明显),我最终会遇到两个问题: 创建联系人的多个副本,通常是数百个!这些都是空白的,只是与被修改的原始联系人共享相同的显示名称 联系人下有多个号码(完全相同)。真正不寻常的是,这些数字在contactContracts.Data表中具有相同的_ID,因此无法理解为什么会有多个实例具有相同的唯一ID。我检查了是否存在显

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

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

  • 联系人下有多个号码(完全相同)。真正不寻常的是,这些数字在contactContracts.Data表中具有相同的_ID,因此无法理解为什么会有多个实例具有相同的唯一ID。我检查了是否存在显示问题,但似乎不是

  • 以上两种情况都让我怀疑我是否正确插入了信息。所以我想知道的是:

  • 创建新联系人时,是否有我应该指定的默认帐户名和帐户类型?我目前对这两个都使用null

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


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

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