【问题标题】: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 可以将它们用于任何需要的目的,通常,其中一个用作“服务器标识符”,您只需要打印它们,并手动检查哪一个。