Android: получите уникальный идентификатор контакта Google из базы данных ContactProvider
Я работаю над требованием, при котором мне нужно идентифицировать все контакты Google, сохраненные / синхронизированные с телефонной книгой устройства Android. Затем мне нужно получить уникальный идентификатор контакта (уникальный идентификатор контакта Google) для каждого контакта, который будет одинаковым на других устройствах и других платформах.
Я прочитал документацию для разработчиков Android относительно RAW_CONTACT_ID. Кроме того, попытался получить необработанный идентификатор контакта, но я получаю другое значение необработанного идентификатора контакта на других устройствах.
Если кто-то может направить меня в правильном направлении, это будет действительно полезно.
Если вам нужна дополнительная информация, пожалуйста, спросите.
2 ответа
Все _ID
значения в Android Contacts
являются локальными, они обычно являются инкрементными и не синхронизируются между устройствами.
Значения, которые могут быть синхронизированы приложением SyncAdapter
(в этом случае Google SyncAdapter) являются SYNC1
, SYNC2
, SYNC3
, SYNC4
,
Тем не менее, обратите внимание, что эти поля не гарантируют ничего, и SyncAdapter
их можно использовать для любых целей, обычно один из них используется в качестве "идентификатора сервера", вам просто нужно распечатать их и вручную проверить, какой из них.
Попробуйте использовать 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
это то, что вы ищете.
Вы также можете попробовать решение, представленное в этом сообщении:
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;
}