Подтвердить что ты не робот

Изменение контактной информации

Я пытаюсь вставить и обновить часть информации в контакте существующий, поэтому я создал образец приложения для разработки функциональности. Все, что я хочу, чтобы мое примерное приложение выполняло, - это вставить (или если есть) обновление адреса электронной почты в контакте.

Я выбираю контакт через систему Intent следующим образом:

    startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);

Возвращаемый URI является идентификатором Contact (RawContact?), который был выбран и входит в эту форму: content://com.android.contacts/contacts/lookup/0r2-2A90214945/2.

Я могу отбросить все элементы Data (RawContact?), выполнив следующий код:

Cursor cursor = contentResolver.query(mContactUri, null, null, null, null);
try {
    if (cursor.moveToFirst()) {
        for(int i=0; i < cursor.getColumnCount(); i++) {
            String message = cursor.getColumnName(i);
            Log.v("", message);
        }
    }
} finally {
    cursor.close();
}

Из этого я должен быть в состоянии определить, имеет ли контакт уже CommonDataTypes.Email Data member:

cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;

И затем выполните одно из следующих действий: < <29 > или Update Data:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

ops.add(ContentProviderOperation.newInsert(mContactUri)
    .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
    .withValue(Email.DISPLAY_NAME, "[email protected]")
    .withValue(Email.TYPE, Email.TYPE_HOME)
    .build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

Но это дает мне исключение: java.lang.UnsupportedOperationException: URI: content://com.android.contacts/contacts/lookup/0r2-2A90314945/2, calling user:

Надеюсь, кто-то может увидеть, что я пропустил.

PS, я использую эти разрешения:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
4b9b3361

Ответ 1

Люди Android должны обновить документацию . На самом деле это помогло мне узнать меньше о том, что происходит, чем я мог бы догадаться. Это предполагает, что вы можете отменить Contact, который будет содержать много RawContacts, которые будут содержать Data.

Эта интерпретация совершенно неверна. ContactContracts data вместо трех обычных обычных ежедневных таблиц базы данных *:

ContactContract Tables

Таблица Contacts

Доступ к URI: Contacts.CONTENT_URI

Первичный ключ **: Data._ID

Описание:

В этой таблице содержится информация о контакте (когда он был добавлен, что это значок пользователя, имеет ли он пользовательский рингтон).

Отношение: имеет отношение "1 ко многим" с таблицей RawContact.

Таблица RawContacts

Доступ к URI: RawContacts.CONTENT_URI

Первичный ключ: Data._ID

Внешний ключ **: Data.CONTACT_ID

Описание:

В этой таблице содержится информация о соответствующем наборе элементов данных. RawContact может содержать тип электронной почты, отображаемое имя электронной почты, номер телефона, имя телефона и т.д. RawContact можно агрегировать с другими RawContacts, чтобы сделать Contact, как видит пользователь. Контакт может содержать только один RawContact.

Отношение: имеет отношение "1 ко многим" с таблицей Data.

Таблица Data

Доступ к URI: Data.CONTENT_URI

Первичный ключ: Data._ID

Внешний ключ: Data.RAW_CONTACT_ID

Описание:

В этой таблице содержится одно поле информации. Адрес электронной почты, номер телефона, тип номера телефона (домашний/рабочий), псевдоним, отображаемое имя.

В ответ на вопрос

Я загрузил весь образец проекта в GitHub, чтобы другие могли видеть, как запрашивать, обновлять и вставлять записи с помощью ContactContract.

Вы можете найти проект для загрузки здесь: https://github.com/gwoodhouse/ContactContractSample

Если вы просто хотите посмотреть на java-код, выполняющий запрос /update/insert, вот файл класса: https://github.com/gwoodhouse/ContactContractSample/blob/master/ContactsIntegration/src/com/woodhouse/example/activity/ContactsIntegrationActivity.java

Надеюсь, это поможет!

* Не таблица, а ContentProvider

** не строго верно.Суб >