Добавление события в ContactsContract.CommonDataKinds.Event в Android с помощью средства выбора контактов - PullRequest
3 голосов
/ 13 января 2012

В активности моего приложения для Android я хотел бы открыть средство выбора контента. И когда пользователь выбирает один из этих контактов, в таблицу должна быть добавлена ​​новая запись (событие с типом "other") ContactsContract.CommonDataKinds.Event .

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

@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 contactData = data.getData();
            //String contactID = contactData.getLastPathSegment();
            // ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT START
            ContentValues values = new ContentValues();
            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
            values.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_OTHER);
            values.put(ContactsContract.CommonDataKinds.Event.CONTACT_ID, 250);
            values.put(ContactsContract.CommonDataKinds.Event.START_DATE, "2012-12-12");
            Uri dataUri = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
            // ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT END
            break;
        }
    }
}

Для этого кода требуется разрешение "WRITE_CONTACTS".

Идентификатор контакта "250" жестко запрограммирован. Конечно, его следует извлечь из данных о намерениях, которые отправляются вместе с результатом выбора контактов.

Приведенный выше код заканчивается исключением NullPointerException. Почему это так? И как я могу получить идентификатор контакта из намерения, чтобы я мог использовать его для вставки новой строки?

Редактировать: Дополнительно, строка ...

getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

... выдает исключение. Что там не так?

1 Ответ

0 голосов
/ 13 января 2012

Вот как это сделать, предполагая, что именно так вы и назвали средство выбора контактов:

int CONTACT_PICKER_ID = 1001; //some arbitrary number that you choose
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivity(intent, CONTACT_PICKER_ID);

Вызов data.getData () возвращает ключ поиска, для которого необходимо запросить базу данных контактов, чтобы найти идентификатор контакта.

if (resultCode == RESULT_OK) {  
    switch (requestCode) {  
        case CONTACT_PICKER_ID:  
            Cursor cursor =  managedQuery(data.getData(), null, null, null, null);
            cursor.moveToFirst();
            //get the contact's ID
            contactId = Cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

...

ContactId содержит желаемый идентификатор.

...