Профиль пользователя
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);
При выполнении приведенного выше кода профиль пользователя отображается, как показано на следующем снимке экрана:
Работа с профилем пользователя аналогична взаимодействию с другими данными в Android и обеспечивает дополнительный уровень персонализации устройств.