Android:从ContactProvider数据库获取Google的唯一联系人ID

时间:2017-09-12 10:15:02

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

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

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

如果有人能让我朝着正确的方向前进,那将会非常有帮助。

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

2 个答案:

答案 0 :(得分:0)

尝试使用ContactsContract.PhoneLookup

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

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

其中

 PhoneLookup._ID

是您正在寻找的。

您也可以尝试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;
}

答案 1 :(得分:0)

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

应用程序SyncAdapter(在本例中为Google的SyncAdapter)可能会同步的值为SO post 2

但请注意,这些字段不保证可以执行任何操作,SyncAdapter可以将它们用于所需的任何目的,通常,其中一个用作"服务器标识符"你只需要打印它们,并手动检查哪一个。