Окно выбора контактов Android – это стандартный интерфейс, который позволяет пользователям делиться определенными контактами с приложениями, не нарушая конфиденциальности.
Эта функция, появившаяся в Android 17, представляет собой альтернативу разрешению READ_CONTACTS, не требующую предоставления доступа.
С помощью инструмента выбора контактов приложения могут запрашивать доступ к определенным данным, например к номерам телефонов или адресам электронной почты. Пользователь выбирает контакты, которыми хочет поделиться, и система предоставляет приложению временный доступ только для чтения этих данных.
Архитектура
Инструмент выбора контактов состоит из двух основных компонентов:
- Приложение "Выбор контактов". Этот компонент представляет собой пользовательский интерфейс для выбора контактов.
- Поставщик сеансов. Этот компонент действует как бэкенд-служба, управляющая сеансом временного доступа.

Рисунок 1. Диаграмма последовательности
Интерфейс выбора файлов
Интерфейс инструмента выбора контактов обрабатывает пользовательский интерфейс для выбора контактов и напрямую запрашивает у поставщика контактов данные для заполнения представлений на основе запрошенных типов данных. Поддерживаются следующие представления:
- Только номера телефонов. В интерфейсе будут показаны контакты, содержащие номера телефонов.
- Только адреса электронной почты. В интерфейсе будут показаны контакты с адресами электронной почты.
- Специальная контактная информация. В интерфейсе показываются контакты, соответствующие определенным запрошенным полям данных.
Кроме того, в интерфейсе поддерживаются следующие функции:
- Список в алфавитном порядке. Контакты сортируются по алфавиту, а дубликаты удаляются.
- Аватары контактов. В интерфейсе показываются фотографии или аватары контактов.
- Избранное. Категория "Избранное" показывается вверху списка контактов.
- Переключатель профилей. Пользователи могут выбирать контакты из разных профилей пользователей, например рабочего и личного.
- Один или несколько вариантов. Система поддерживает выбор одного или нескольких вариантов (по умолчанию можно выбрать до 50 вариантов, а максимум – 100).
- Предварительный просмотр выбранных контактов. Пользователи могут просматривать выбранные контакты и управлять ими перед подтверждением.
- Быстрая прокрутка. Эта функция позволяет быстро перемещаться по списку контактов.
- Поиск. Строка поиска позволяет находить нужные контакты.
- Баннер и страница приложения с информацией о конфиденциальности. Обязательное уведомление, в котором пользователям сообщается, какие именно поля данных (например, номера телефонов, адреса электронной почты) запрашивает приложение.
Поставщик сеансов
Поставщик сеанса (packages/providers/ContactsProvider) выступает в качестве безопасного посредника между клиентским приложением и поставщиком контактов.
- Роль. Используйте поставщика сеансов только при запуске инструмента выбора с помощью
Intent.ACTION_PICK_CONTACTS. - Управление сеансом. Когда пользователь выбирает контакты, интерфейс выбора записывает данные о выбранных контактах (сопоставленные с UID клиента) в поставщика сеанса.
- Доступ к данным. Поставщик возвращает URI
content://com.android.providers.contacts.picker.sessionsв инструмент выбора. Перед тем как вернуть URI клиентскому приложению, средство выбора применяет к нему подходящие флаги чтения. Этот URI предоставляет временный детализированный доступ на чтение к определенным полям данных, выбранным пользователем, не раскрывая все данные контакта. - Привилегированный доступ. Разрешения
android.permission.MANAGE_CONTACTS_PICKER_SESSIONи подпись защищают доступ для записи к поставщику сеансов, гарантируя, что создавать сеансы может только доверенный системный инструмент выбора.
Интеграция
Производители оборудования и партнеры должны включать выбор контактов Android в сборки с Android 17 и более поздними версиями.
Поддерживаемые намерения
Intent.ACTION_PICK_CONTACTS– рекомендуемое намерение для приложений, предназначенных для Android 17 и более поздних версий.Intent.ACTION_PICK– поддерживается для обратной совместимости. Система автоматически перенаправляет эти запросы в новый инструмент выбора для поддерживаемых MIME-типов (электронная почта, телефон или контакт).
Управление сеансами
Чтобы обеспечить конфиденциальность и состояние устройства, поставщик сеансов применяет строгие правила очистки данных:
- Задание на очистку. Системное задание (
CleanupJobService) периодически удаляет данные сеансов, которые старше 24 часов. - Ограничение на количество строк. Чтобы не занимать слишком много места в хранилище, в таблице поставщиков сеансов может быть не более 5000 строк. Если таблица достигает этого размера, система автоматически удаляет самые старые строки перед вставкой новых данных сеанса.
- Сохранение. Данные сеанса являются временными. Клиентские приложения должны сохранять возвращенные данные о контактах сразу после получения.
Разрешения
Для записи в поставщика сеансов требуется разрешение android.permission.MANAGE_CONTACTS_PICKER_SESSION, которое предоставляется только пакету инструмента выбора контактов в Android.
Настройка и соответствие требованиям
Партнеры могут настраивать визуальные элементы, такие как шрифты и цвета, но реализация должна соответствовать разделу 3.18.2 "Инструмент выбора контактов" документа CDD для Android.
Проверка
Партнеры должны проверять реализацию с помощью Compatibility Test Suite (CTS) и набора тестов Google для мобильных устройств (GTS).