2015-10-15 3 views
2

Я не могу найти подробную информацию об агрегировании в контактах Android. Я знаю структуру ->ContactsContract.RawContacts ->ContactsContract.Data (как описано на http://developer.android.com/guide/topics/providers/contacts-provider.html) и что Contact состоит из Raw Contacts, которые сгруппированы вместе по одному Contact_ID.Процесс агрегации контактов Android

Что конкретно я хочу знать: при каких обстоятельствах Raw Contacts сгруппированы в один контакт?

Я нашел this вопрос и ответ - конкретно последний вариант:

По крайней мере, один из двух исходных контактов недостающего названия в целом и они делят номер телефона, адрес электронной почты или псевдоним (например, Bob Parr [[email protected]] = [email protected]).

Я пробовал это, однако, похоже, что он не работает. Я хочу знать, могу ли я добавить Raw Contact к местным контактам, и установить только ACCOUNT_TYPE, ACCOUNT_NAME и телефон или адрес электронной почты, и если это будет автоматически объединено с сырым контактом, для которого этот номер телефона или адрес электронной почты уже существует.Так, например:

(ContactsContract.Contacts.) _ID (похожие на ContactsContract.RawContacts.Contact_ID): 1188300 состоит из:

  • сырье Contact ID 20905
    MIMETYPE = \email_v2
    ACCOUNT_TYPE = com.google
    NAME = Example Test
    EMAIL = [email protected]
  • Сырье Contact ID 20897
    MIMETYPE = \phone_v2
    ACCOUNT_TYPE = com.google
    NAME = Example Test
    EMAIL = 123456

После добавления следующего:

  • Сырое Контакт
    MIMETYPE = \email_v2
    ACCOUNT_TYPE = com.exampleApp EMAIL = [email protected]

будет этот результат в: (ContactsContract.Contacts.) _ID: 1188300, состоящий из:

  • сырье Contact ID 20905
    MIMETYPE = \email_v2
    ACCOUNT_TYPE = com.google
    NAME = Example Test
    EMAIL = [email protected]
  • сырье Contact ID 20897
    MIMETYPE = \phone_v2
    ACCOUNT_TYPE = com.google
    NAME = Example Test
    EMAIL = 123456

  • сырье Contact ID 20899 (или любой другой номер)
    MIMETYPE = \email_v2
    ACCOUNT_TYPE = com.exampleApp
    NAME = Example Test
    EMAIL = [email protected]

ответ

1

агрегация контакты обрабатывается ContactAggregator2.java

Что такое делает матч каждый сырым контакт с другими сырьевыми контактами, то агрегирование выполняется на основе баллов, порожденного RawContactMatcher

Файл содержит немного объяснение, но вы можете проверить счет, назначенный для разных параметров, а также соответствующие баллы (ТОЧНЫЕ, КОНСЕРВАТИВНЫЕ и ПРИБЛИЗИТЕЛЬНЫЕ).

Пример Name-

/** 
* Name matching scores: a matrix by name type vs. candidate lookup type. 
* For example, if the name type is "full name" while we are looking for a 
* "full name", the score may be 99. If we are looking for a "nickname" but 
* find "first name", the score may be 50 (see specific scores defined 
* below.) 
* <p> 
* For approximate matching, we have a range of scores, let's say 40-70. Depending one how 
* similar the two strings are, the score will be somewhere between 40 and 70, with the exact 
* match producing the score of 70. The score may also be 0 if the similarity (distance) 
* between the strings is below the threshold. 
* <p> 
* We use a string matching algorithm, which is particularly suited for 
* name matching. See {@link NameDistance}. 
*/ 

Если вы хотите два контакта агрегатироваться (Регистрация) просто добавить запись в http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html с типом, как TYPE_KEEP_TOGETHER

+0

AggregationExceptions: Вы можете обновить этот, вы можете Не добавлять новые записи за каждую документацию –

Смежные вопросы