Profilo utente

Android ha supportato l'enumerazione dei contatti con il provider ContactsContract a partire dal livello API 5. Ad esempio, l'elenco dei contatti è semplice come l'uso della classe ContactContracts.Contacts , come illustrato nell'esempio di codice seguente:

// Get the URI for the user's contacts:
var uri = ContactsContract.Contacts.ContentUri;

// Setup the "projection" (columns we want) for only the ID and display name:
string[] projection = {
    ContactsContract.Contacts.InterfaceConsts.Id,
    ContactsContract.Contacts.InterfaceConsts.DisplayName };

// Use a CursorLoader to retrieve the user's contacts data:
CursorLoader loader = new CursorLoader(this, uri, projection, null, null, null);
ICursor cursor = (ICursor)loader.LoadInBackground();

// Print the contact data to the console if reading back succeeds:
if (cursor != null)
{
    if (cursor.MoveToFirst())
    {
        do
        {
            Console.WriteLine("Contact ID: {0}, Contact Name: {1}",
                               cursor.GetString(cursor.GetColumnIndex(projection[0])),
                               cursor.GetString(cursor.GetColumnIndex(projection[1])));
        } while (cursor.MoveToNext());
    }
}

A partire da Android 4 (livello API 14), la classe ContactsContact.Profile è disponibile tramite il ContactsContract provider. ContactsContact.Profile fornisce l'accesso al profilo personale per il proprietario di un dispositivo, che include i dati di contatto, ad esempio il nome e il numero di telefono del proprietario del dispositivo.

Autorizzazioni necessarie

Per leggere e scrivere i dati di contatto, le applicazioni devono richiedere rispettivamente le READ_CONTACTS autorizzazioni e WRITE_CONTACTS . Inoltre, per leggere e modificare il profilo utente, le applicazioni devono richiedere le READ_PROFILE autorizzazioni e WRITE_PROFILE .

Aggiornamento dei dati del profilo

Dopo aver impostato queste autorizzazioni, un'applicazione può usare le normali tecniche Android per interagire con i dati del profilo utente. Ad esempio, per aggiornare il nome visualizzato del profilo, chiamare ContentResolver.Update con un Uri oggetto recuperato tramite la proprietà ContactsContract.Profile.ContentRawContactsUri , come illustrato di seguito:

var values = new ContentValues ();
values.Put (ContactsContract.Contacts.InterfaceConsts.DisplayName, "John Doe");

// Update the user profile with the name "John Doe":
ContentResolver.Update (ContactsContract.Profile.ContentRawContactsUri, values, null, null);

Lettura dei dati del profilo

L'esecuzione di una query a ContactsContact.Profile.ContentUri legge i dati del profilo. Ad esempio, il codice seguente leggerà il nome visualizzato del profilo utente:

// Read the profile
var uri = ContactsContract.Profile.ContentUri;

// Setup the "projection" (column we want) for only the display name:
string[] projection = {
    ContactsContract.Contacts.InterfaceConsts.DisplayName };

// Use a CursorLoader to retrieve the data:
CursorLoader loader = new CursorLoader(this, uri, projection, null, null, null);
ICursor cursor = (ICursor)loader.LoadInBackground();
if (cursor != null)
{
    if (cursor.MoveToFirst ())
    {
        Console.WriteLine(cursor.GetString (cursor.GetColumnIndex (projection [0])));
    }
}

Infine, per passare al profilo utente, creare una finalità con un'azione ActionView e ContactsContract.Profile.ContentUri quindi passarla al StartActivity metodo come segue:

var intent = new Intent (Intent.ActionView,
    ContactsContract.Profile.ContentUri);
StartActivity (intent);

Quando si esegue il codice precedente, il profilo utente viene visualizzato come illustrato nello screenshot seguente:

Screenshot of profile displaying the John Doe user profile

L'uso del profilo utente è simile all'interazione con altri dati in Android e offre un livello aggiuntivo di personalizzazione dei dispositivi.