Профиль пользователя

Android поддерживает перечисление контактов с поставщиком ContactsContract с уровня 5 API. Например, перечисление контактов так же просто, как и в классе ContactContracts.Contacts , как показано в следующем примере кода:

// 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());
    }
}

Начиная с Android 4 (уровень API 14), класс ContactsContact.Profile доступен через ContactsContract поставщика. Предоставляет ContactsContact.Profile доступ к личному профилю владельца устройства, который включает контактные данные, такие как имя владельца устройства и номер телефона.

Необходимые разрешения

Для чтения и записи контактных данных приложения должны запрашивать READ_CONTACTS и WRITE_CONTACTS разрешения соответственно. Кроме того, для чтения и изменения профиля пользователя приложения должны запрашивать READ_PROFILE и WRITE_PROFILE разрешения.

Обновление данных профиля

После установки этих разрешений приложение может использовать обычные методы Android для взаимодействия с данными профиля пользователя. Например, чтобы обновить отображаемое имя профиля, вызовите ContentResolver.Update с Uri помощью свойства ContactsContract.Profile.ContentRawContactsUri , как показано ниже:

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);

Чтение данных профиля

Выдача запроса в ContactsContact.Profile.ContentUri считывает данные профиля. Например, следующий код считывает отображаемое имя профиля пользователя:

// 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])));
    }
}

Наконец, чтобы перейти к профилю пользователя, создайте намерение с ActionView действием и ContactsContract.Profile.ContentUri передайте его в StartActivity метод следующим образом:

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

При выполнении приведенного выше кода профиль пользователя отображается, как показано на следующем снимке экрана:

Screenshot of profile displaying the John Doe user profile

Работа с профилем пользователя аналогична взаимодействию с другими данными в Android и обеспечивает дополнительный уровень персонализации устройств.