Я много работал над следующим кодом, но, к сожалению, запись назначена не тому контакту. Я не знаю почему. Проверено на часов дней, но не может найти ошибку. Вы можете мне помочь?
Я хотел бы использовать код, чтобы выбрать человека из списка контактов (используя средство выбора контактов), а затем добавить запись о событии (дата рождения) для этого человека в таблицу контактов.
Шаг 1:
Я уже установил разрешение в файле манифеста:
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
Шаг 2:
Идентификатор сборщика контактов определен:
private static final int CONTACT_PICKER_ID = 123;
Шаг 3:
Сборщик контактов называется:
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_ID);
Шаг 4:
Другой метод прослушивает результат средства выбора контактов и пытается добавить событие для выбранного пользователя:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_ID:
Uri selectedPerson = data.getData();
String contactId = selectedPerson.getLastPathSegment();
// ADD A NEW EVENT FOR THE SELECTED CONTACT --- BEGIN
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId);
values.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
values.put(ContactsContract.CommonDataKinds.Event.RAW_CONTACT_ID, contactId);
values.put(ContactsContract.CommonDataKinds.Event.LABEL, "");
values.put(ContactsContract.CommonDataKinds.Event.START_DATE, "2010-01-28"); // hard-coded date of birth
Uri created = null;
try {
created = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
catch (Exception e) {
}
if (created == null) {
Toast.makeText(this.getApplicationContext(), "Failed inserting the event!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this.getApplicationContext(), "Successfully inserted the event!", Toast.LENGTH_SHORT).show();
}
// ADD A NEW EVENT FOR THE SELECTED CONTACT --- END
break;
}
}
}
Событие успешно добавлено в базу данных, а также показано в контактах Google, но, к сожалению, оно назначено не тому контакту. Почему это так? Является ли мой contactId неправильным, что я получаю из средства выбора контактов?