Как работает связь с Android?
Я хотел бы понять, как работает контактная связь в Android, или, если быть конкретным, я хотел бы понять ее довольно глубоко, почти с алгоритмической точки зрения .
То, что я наблюдал на своем телефоне, заключается в том, что некоторые контакты были связаны автоматически, а некоторые не были (хотя, когда вы переходите на экран ручной ссылки, Android предложит неплохие совпадения), и я смущен этим.
Итак, мои конкретные вопросы:
- Что такое триггер для автоматической связи контактов? Когда это происходит?
- Скажем, что ответ на 1) - «когда новый контакт добавляется вручную или через синхронизацию аккаунта». Итак, когда добавляется новый контакт, что произойдет? Будет ли Android проходить через все существующие контакты и попытаться выяснить, является ли новый контакт только связанным контактом?
- Когда Android распознает новый контакт как связанный контакт? Когда имена совпадают? Телефонные номера? Электронные письма? Некоторая комбинация из них?
Любое прозрение поможет расчистить это для меня, спасибо.
1 ответ
См. раздел Автоматическая агрегирование контактных данных в Использование API контактов из технических ресурсов на сайте разработчиков Android .
Как объясняется в статье:
Когда сырой контакт добавлен или изменен, система ищет совпадающие (перекрывающиеся) необработанные контакты, с помощью которых можно их агрегировать. Он может не найти подходящих сырых контактов, и в этом случае он создаст совокупный контакт, содержащий только исходный сырой контакт. Если он находит одно совпадение, он создает новый контакт, содержащий два необработанных контакта. И он может даже найти несколько похожих исходных контактов, и в этом случае он выбирает самое близкое соответствие.
Два необработанных контакта считаются совпадающими, если выполняется хотя бы одно из этих условий:
- У них есть соответствующие имена.
- Их имена состоят из одних и тех же слов, но в другом порядке (например,
"Bob Parr"
и"Parr, Bob"
) литий>- У одного из них есть общее короткое имя для другого (например,
"Bob Parr"
и"Robert Parr"
) литий>- У одного из них есть только первое или последнее имя, и он соответствует другому сырому контакту. Это правило менее надежное, поэтому оно применяется только в том случае, если два сырых контакта также используют некоторые другие данные, такие как номер телефона, адрес электронной почты или псевдоним (например,
Helen ["elastigirl"] = Helen Parr ["elastigirl"]
)- По крайней мере, один из двух сырых контактов не содержит названия вообще, и они делят номер телефона, адрес электронной почты или псевдоним (например,
Bob Parr [[email protected]] = [email protected]
)При сравнении имен система игнорирует разницу в верхнем /нижнем регистре
(Bob=BOB=bob)
и диакритические метки(Hélène=Helene)
. При сравнении двух телефонных номеров система игнорирует специальные символы, такие как"*"
,"#"
,"(", ")"
и пробельные символы. Кроме того, если единственное различие между двумя номерами состоит в том, что у одного есть код страны, а другой нет, то система считает, что это совпадение (за исключением номеров в японском коде страны)Автоматическая агрегация не является постоянной; любое изменение исходного контакта может создать новый агрегат или разбить существующий.
Далее в статье объясняются различные режимы, которые приложение может назначать raw-контактам , которые он создает. В зависимости от режима система будет либо:
- Автоматически агрегировать контакт, поскольку сходства встречаются с другими контактами. Если сходства больше не существуют, эти скопления будут удалены.
- Никогда не объединяйте контакт с другими.
- Не выполняйте дальнейшую агрегацию на контакте, даже если этот контакт изменится так, что он будет выведен из совокупной группы.
Помимо этой автоматической агрегации, приложениям также разрешено вручную настраивать агрегированные контакты. В этих случаях алгоритм зависит от приложения.
Наконец, вы можете вручную присоединиться к контактам в приложении People , отредактировав одну из пары контактов и выбрав Join
из меню переполнения.