Я использую ContactContracts API для извлечения записей в таблице RawContacts
private void fetchRawContactEntries() {
String [] mProjectionColumns = new String [] {
RawContacts.CONTACT_ID, RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.DISPLAY_NAME_PRIMARY
};
Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, mProjectionColumns, null, null,
RawContacts.DISPLAY_NAME_PRIMARY + " ASC");
if(c != null) {
while(c.moveToNext()) {
long contactId = c.getLong(0);
String accountName = c.getString(1);
String accountType = c.getString(2);
String displayName = c.getString(3);
Log.d("Logs", contactId + ", accountName:" + accountName + ", Display Name : " + displayName);
}
}
}
Я вижу, что у каждого контакта есть несколько записей в таблице raw_contacts.(Gmail, Duo и т. Д.)
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2227, accountName:kartikayemail@gmail.com, Display Name : Abhay Y
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2227, accountName:WhatsApp, Display Name : Abhay Y
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2227, accountName:Duo, Display Name : Abhay Y
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2227, accountName:Duo, Display Name : Abhay Y
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2140, accountName:kartik@gmail.com, Display Name : Abhayuday
2019-05-28 19:21:15.483 5458-5458/com.example.kartikaysingh.cs D/Logs: 2140, accountName:WhatsApp, Display Name : Abhayuday
2019-05-28 19:21:15.484 5458-5458/com.example.kartikaysingh.cs D/Logs: 2140, accountName:Duo, Display Name : Abhayuday
2019-05-28 19:21:15.484 5458-5458/com.example.kartikaysingh.cs D/Logs: 2140, accountName:Duo, Display Name : Abhayuday
Infact Duo
делает две разные записи в таблице RawContact.Как приложение native contact
различает эти записи.
Я знаю, что они показывают записи таблицы контактов , но когда изменяет данные, которые raw_contact_id выбирают из Duo or Whatsapp or gmail
,Откуда они берут эти оригинальные raw_contact_id ?
Вот вещи, которые я уже знаю:
- Идентификатор контакта повторяющихся записей будетбыть одинаковыми независимо от источников, которые обрабатываются поставщиком контактов.Проверьте это ContactsAggregator
- В таблице контактов есть столбец
name_raw_contact_id
, в котором указан соответствующий _ID таблицы RawContacts (однако я не уверен, может ли это рассматриваться в качестве основной записи дляконтакт в таблице RawContacts).
Ниже приводится список вещей, которые я хочу знать:
- Мы можем получить уникальные контакты из
ContactsContract.Contact
таблица, но для того, чтобы изменить / удалить значения данных (например, телефон, электронная почта и т. Д.), Используя поставщика провайдеров, какой raw_contact_id мы можем выбрать?или я могу пойти и изменить непосредственно в таблице ContactContract.Data
. - Как WhatsApp обнаруживает добавление / изменение контакта.Насколько я знаю, поставщик контактов не предоставляет
_ID
для добавления новых контактов.Обновляют ли они свой список контактов после каждого запуска приложения или через равные промежутки времени? - Как получить исходный источник для контакта (возможно, gmail / native в моем случае) и исключить копии, созданные такими приложениями, как Duo, Skype, WhatsApp, с помощью поставщика контактов.
Было бы здорово, если бы кто-нибудь помог мне понять это.Не стесняйтесь рекомендовать любой другой канал, где я могу задать эти вопросы