Il selettore di contatti Android fornisce un'interfaccia standard che tutela la privacy e consente agli utenti di condividere contatti specifici con le app.
Introdotta in Android 17, questa funzionalità è un'alternativa senza autorizzazioni all'autorizzazione READ_CONTACTS generale.
Utilizzando il selettore di contatti, le app possono richiedere l'accesso a dati di contatto specifici, come numeri di telefono o indirizzi email. L'utente seleziona i contatti che vuole condividere e il sistema concede all'app l'accesso in lettura temporaneo solo a questi dettagli.
Architettura
Il selettore di contatti è costituito da due componenti principali:
- App dell'interfaccia utente del selettore: questo componente funge da interfaccia rivolta all'utente per la selezione dei contatti.
- Provider di sessioni: questo componente funge da servizio di backend che gestisce la sessione di accesso temporaneo.

Figura 1. Diagramma di sequenza
Interfaccia utente del selettore
L'interfaccia utente del selettore gestisce l'interfaccia utente per la selezione dei contatti ed esegue query direttamente sul provider di contatti per popolare le visualizzazioni in base ai tipi di dati richiesti. Le visualizzazioni supportate includono:
- Solo numeri di telefono: l'interfaccia utente mostra i contatti che contengono numeri di telefono.
- Solo email: l'interfaccia utente mostra i contatti che contengono indirizzi email.
- Dati di contatto personalizzati: l'interfaccia utente mostra i contatti che corrispondono a campi di dati specifici richiesti.
Inoltre, l'interfaccia utente supporta le seguenti funzionalità:
- Elenco ordinato alfabeticamente: i contatti sono ordinati alfabeticamente con deduplicazione.
- Avatar dei contatti: l'interfaccia utente mostra le foto o gli avatar dei contatti.
- Preferiti: nella parte superiore dell'elenco dei contatti viene visualizzata una categoria Preferiti.
- Selettore di profili: questa funzionalità consente agli utenti di selezionare i contatti da profili utente diversi (ad esempio, Lavoro e Privato).
- Selezione singola e multipla: il sistema supporta le modalità di selezione singola e multipla (il limite predefinito è 50 e il massimo è 100).
- Anteprima della selezione: gli utenti possono visualizzare in anteprima e gestire i contatti selezionati prima di confermare.
- Scorrimento rapido: questa funzionalità consente di navigare rapidamente nell'elenco dei contatti.
- Cerca: è disponibile una barra di ricerca per trovare contatti specifici.
- Banner sulla privacy e pagina dei dettagli sulla privacy: un avviso obbligatorio informa gli utenti esattamente quali campi di dati (ad esempio, numeri di telefono, email) sta richiedendo l'app.
Provider di sessioni
Il provider di sessioni (packages/providers/ContactsProvider) funge da intermediario sicuro tra l'app client e il provider di contatti.
- Ruolo: utilizza il provider di sessioni solo quando avvii il selettore utilizzando
Intent.ACTION_PICK_CONTACTS. - Gestione sessione: quando un utente seleziona i contatti, l'interfaccia utente del selettore scrive i dati di selezione (mappati all'UID del client) nel provider di sessioni.
- Accesso ai dati: il provider restituisce un URI
content://com.android.providers.contacts.picker.sessionsal selettore. Il selettore applica i flag di lettura appropriati prima di restituire l'URI all'app client. Questo URI concede l'accesso in lettura temporaneo e granulare ai campi di dati specifici selezionati dall'utente, senza esporre tutti i dati del contatto. - Accesso con privilegi: le autorizzazioni con privilegi e la firma
android.permission.MANAGE_CONTACTS_PICKER_SESSIONproteggono l'accesso in scrittura al provider di sessioni, garantendo che solo il picker di sistema attendibile possa creare sessioni.
Integrazione
I produttori di hardware e i partner devono includere il selettore di contatti Android nelle build con Android 17 e versioni successive.
Intent supportati
Intent.ACTION_PICK_CONTACTS: l'intent consigliato per le app che hanno come target Android 17 e versioni successive.Intent.ACTION_PICK: mantenuto per la compatibilità con le versioni precedenti. Il sistema instrada automaticamente queste richieste al nuovo selettore per i tipi MIME supportati (email, telefono o contatto).
Gestione sessione
Per mantenere l'integrità e la privacy del dispositivo, il provider di sessioni applica una rigorosa policy di pulizia dei dati:
- Job di pulizia: un job di sistema (
CleanupJobService) viene eseguito periodicamente per rimuovere i dati della sessione più vecchi di 24 ore. - Limite di righe: per evitare un utilizzo eccessivo dello spazio di archiviazione, la tabella del provider di sessioni è limitata a un massimo di 5000 righe. Se la tabella raggiunge queste dimensioni, il sistema elimina automaticamente le righe meno recenti prima di inserire nuovi dati della sessione.
- Persistenza: i dati della sessione sono temporanei. Le app client devono rendere persistenti i dati di contatto restituiti immediatamente dopo la ricezione.
Autorizzazioni
L'accesso in scrittura al provider di sessioni richiede l'autorizzazione android.permission.MANAGE_CONTACTS_PICKER_SESSION, che è limitata al pacchetto del selettore di contatti Android.
Personalizzazione e conformità
I partner possono personalizzare gli elementi visivi come caratteri e colori, ma le implementazioni devono rispettare la sezione 3.18.2 (TBD) del CDD di Android.
Convalida
I partner devono verificare la propria implementazione utilizzando sia la Compatibility Test Suite (CTS) sia la Google Mobile Services Test Suite (GTS).