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

Рисунок 1. Схема последовательности
Пользовательский интерфейс выбора
Интерфейс Picker отвечает за выбор контактов и напрямую запрашивает данные у поставщика контактов для заполнения представлений на основе запрошенных типов данных. Поддерживаются следующие представления:
- Только телефонные номера: в пользовательском интерфейсе отображаются контакты, содержащие телефонные номера.
- Только электронная почта: в пользовательском интерфейсе отображаются контакты, содержащие адреса электронной почты.
- Настраиваемая контактная информация: пользовательский интерфейс отображает контакты, соответствующие определенным запрошенным полям данных.
Кроме того, пользовательский интерфейс поддерживает следующие функции:
- Список отсортирован по алфавиту: контакты отсортированы по алфавиту с удалением дубликатов.
- Аватары контактов: В пользовательском интерфейсе отображаются фотографии или аватары контактов.
- Избранное: Категория «Избранное» отображается в верхней части списка контактов.
- Переключение профилей: Эта функция позволяет пользователям выбирать контакты из разных профилей (например, рабочий или личный).
- Выбор одного или нескольких вариантов: Система поддерживает как режим выбора одного варианта, так и режим выбора нескольких вариантов (по умолчанию — 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 Contact Picker в сборки с Android 17 и выше.
Поддерживаемые намерения
-
Intent.ACTION_PICK_CONTACTS: Рекомендуемый интент для приложений, ориентированных на Android 17 и выше. -
Intent.ACTION_PICK: Сохранено для обратной совместимости. Система автоматически перенаправляет эти запросы новому средству выбора для поддерживаемых типов MIME (электронная почта, телефон или контакт).
Управление сессиями
Для обеспечения работоспособности устройства и конфиденциальности данных поставщик сеансов применяет строгую политику очистки данных:
- Задание на очистку: Системное задание (
CleanupJobService) периодически запускается для удаления данных сессии, которым более 24 часов. - Ограничение по количеству строк: Во избежание чрезмерного использования хранилища таблица поставщика сессий ограничена 5000 строками. Если таблица достигает этого размера, система автоматически удаляет самые старые строки перед вставкой новых данных сессии.
- Сохранение данных: Данные сессии носят временный характер. Ожидается, что клиентские приложения будут сохранять полученные контактные данные сразу после их получения.
Разрешения
Для доступа на запись к поставщику сессий требуется разрешение android.permission.MANAGE_CONTACTS_PICKER_SESSION , которое доступно только для пакета Android Contact Picker.
Настройка и соответствие требованиям
Партнеры могут настраивать визуальные элементы, такие как шрифты и цвета, но реализация должна соответствовать разделу 3.18.2 (TBD) стандарта Android CDD.
Проверка
Партнеры должны подтвердить работоспособность своей реализации, используя как набор тестов на совместимость (Compatibility Test Suite, CTS), так и набор тестов на мобильные сервисы Google (Google Mobile Services Test Suite, GTS).