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