El selector de contactos de Android proporciona una interfaz estándar que preserva la privacidad y permite que los usuarios compartan contactos específicos con las apps.
Esta función, que se introdujo en Android 17, sirve como alternativa sin permisos al permiso amplio READ_CONTACTS.
Con el selector de contactos, las apps pueden solicitar acceso a datos de contacto específicos, como números de teléfono o direcciones de correo electrónico. El usuario selecciona los contactos que quiere compartir, y el sistema otorga a la app acceso de lectura temporal solo a esos detalles.
Arquitectura
El selector de contactos consta de dos componentes principales:
- App de IU del selector: Este componente sirve como interfaz para el usuario para seleccionar contactos.
- Proveedor de sesiones: Este componente actúa como el servicio de backend que administra la sesión de acceso temporal.

Figura 1: Diagrama de secuencia
IU del selector
La IU del selector controla la interfaz de usuario para la selección de contactos y consulta directamente el proveedor de contactos para completar las vistas según los tipos de datos solicitados. Entre las vistas admitidas, se incluyen las siguientes:
- Solo números de teléfono: La IU muestra los contactos que contienen números de teléfono.
- Solo correos electrónicos: La IU muestra los contactos que contienen direcciones de correo electrónico.
- Información de contacto personalizada: La IU muestra los contactos que coinciden con los campos de datos solicitados específicos.
Además, la IU admite las siguientes funciones:
- Lista ordenada alfabéticamente: Los contactos se ordenan alfabéticamente y se eliminan los duplicados.
- Avatares de contactos: La IU muestra fotos o avatares de contactos.
- Favoritos: En la parte superior de la lista de contactos, se muestra una categoría de Favoritos.
- Selector de perfiles: Esta función permite a los usuarios seleccionar contactos de diferentes perfiles de usuario (por ejemplo, Trabajo y Privado).
- Selección única y múltiple: El sistema admite los modos de selección única y múltiple (el límite predeterminado es 50 y el máximo es 100).
- Vista previa de la selección: Los usuarios pueden obtener una vista previa de los contactos seleccionados y administrarlos antes de confirmar.
- Desplazamiento rápido: Esta función permite navegar rápidamente por la lista de contactos.
- Buscar: Se proporciona una barra de búsqueda para encontrar contactos específicos.
- Banner y página de detalles de privacidad: Un aviso obligatorio informa a los usuarios exactamente qué campos de datos (por ejemplo, números de teléfono, correos electrónicos) solicita la app.
Proveedor de sesiones
El proveedor de sesiones (packages/providers/ContactsProvider) actúa como intermediario seguro entre la app cliente y el proveedor de contactos.
- Rol: Usa el proveedor de sesión solo cuando inicies el selector con
Intent.ACTION_PICK_CONTACTS. - Administración de sesiones: Cuando un usuario selecciona contactos, la IU del selector escribe los datos de selección (asignados al UID del cliente) en el proveedor de sesiones.
- Acceso a los datos: El proveedor devuelve un URI de
content://com.android.providers.contacts.picker.sessionsal selector. El selector aplica las marcas de lectura adecuadas antes de devolver el URI a la app cliente. Este URI otorga acceso de lectura temporal y detallado a los campos de datos específicos que seleccionó el usuario, sin exponer todos los datos del contacto. - Acceso con privilegios: La firma
android.permission.MANAGE_CONTACTS_PICKER_SESSIONy los permisos con privilegios protegen el acceso de escritura al proveedor de sesiones, lo que garantiza que solo el selector del sistema de confianza pueda crear sesiones.
Integración
Los fabricantes de hardware y los socios deben incluir el Selector de contactos de Android en las compilaciones con Android 17 y versiones posteriores.
Intents admitidos
Intent.ACTION_PICK_CONTACTS: Es el intent recomendado para las apps que segmentan Android 17 y versiones posteriores.Intent.ACTION_PICK: Se mantiene con fines de retrocompatibilidad. El sistema enruta automáticamente estas solicitudes al nuevo selector para los tipos de MIME admitidos (correo electrónico, teléfono o contacto).
Administración de las sesiones
Para mantener el estado del dispositivo y la privacidad, el proveedor de sesiones aplica una política estricta de limpieza de datos:
- Trabajo de limpieza: Se ejecuta un trabajo del sistema (
CleanupJobService) de forma periódica para quitar los datos de sesión que tienen más de 24 horas. - Límite de filas: Para evitar el uso excesivo del almacenamiento, la tabla del proveedor de sesiones tiene un límite máximo de 5,000 filas. Si la tabla alcanza este tamaño, el sistema poda automáticamente las filas más antiguas antes de insertar datos de sesión nuevos.
- Persistencia: Los datos de sesión son transitorios. Se espera que las apps cliente conserven los datos de contacto devueltos inmediatamente después de recibirlos.
Permisos
El acceso de escritura al proveedor de sesiones requiere el permiso android.permission.MANAGE_CONTACTS_PICKER_SESSION, que está restringido al paquete del Selector de contactos de Android.
Personalización y cumplimiento
Los socios pueden personalizar elementos visuales, como fuentes y colores, pero las implementaciones deben cumplir con la sección 3.18.2 (pendiente) del CDD de Android.
Validación
Los socios deben verificar su implementación con el Conjunto de pruebas de compatibilidad (CTS) y el Conjunto de pruebas de Servicios de Google para dispositivos móviles (GTS).