【问题标题】:Android: Get google's unique contact ID from ContactProvider databaseAndroid:从 ContactProvider 数据库中获取 google 的唯一联系人 ID
【发布时间】:2026-02-04 07:25:01
【问题描述】:

我正在处理一项要求,我需要识别所有与 Android 设备的电话簿保存/同步的 Google 联系人。然后我必须获取每个联系人的唯一联系人 ID(Google 的唯一联系人 ID),这在其他设备和其他平台上是相同的。

我已阅读有关RAW_CONTACT_ID 的Android 开发人员文档。此外,尝试获取原始联系人 ID,但我在其他设备上获得了不同的原始联系人 ID 值。

如果有人能把我引向正确的方向,那真的很有帮助。

如果需要更多信息,请询问。

【问题讨论】:

    标签: android android-contacts google-contacts-api android-contact-mimetype


    【解决方案1】:

    尝试使用ContactsContract.PhoneLookup

    表示查找电话号码结果的表格,例如来电显示。要执行查找,您必须将要查找的数字附加到 CONTENT_FILTER_URI。此查询经过高度优化。

    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
     resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
    

    在哪里

     PhoneLookup._ID
    

    就是你要找的。​​p>

    您也可以尝试this post提供的解决方案:

     public static int getContactIDFromNumber(String contactNumber,Context context)
    {
        contactNumber = Uri.encode(contactNumber);
        int phoneContactID = new Random().nextInt();
        Cursor contactLookupCursor = context.getContentResolver().query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,contactNumber),new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, null, null, null);
            while(contactLookupCursor.moveToNext()){
                phoneContactID = contactLookupCursor.getInt(contactLookupCursor.getColumnIndexOrThrow(PhoneLookup._ID));
                }
            contactLookupCursor.close();
    
        return phoneContactID;
    }
    

    【讨论】:

      【解决方案2】:

      Android 的 Contacts 中的所有 _ID 值都是本地的,它们通常是增量的,并且在设备之间同步。

      应用的SyncAdapter(在本例中为 Google 的 SyncAdapter)可能会同步的值是 SYNC1, SYNC2, SYNC3, SYNC4

      但是,请注意,这些字段不能保证做任何事情,SyncAdapter 可以将它们用于任何需要的目的,通常,其中一个用作“服务器标识符”,您只需要打印它们,并手动检查哪一个。

      【讨论】: