Как обновить Android связаться с компанией? - PullRequest
4 голосов
/ 07 апреля 2011

Я недавно создал адаптер синхронизации для своего приложения. Он будет синхронизировать контакты, полученные через веб-запрос, с контактами в телефоне. У меня нет проблем с добавлением контакта, однако я не могу получить контактную информацию для корректного обновления при изменении контактной информации. Например, поле «Название компании» в контакте. Вот несколько примеров запросов, которые я пробовал, которые не работали или работали только частично (т.е. некоторые контакты обновлены, но не правильно):

        ContentValues values = new ContentValues();
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company");
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) } );

Я также пытался сделать это в пакетном режиме, как предлагается в документации Android:

    builder = ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)});

    builder.withValue(
            ContactsContract.CommonDataKinds.Organization.COMPANY,
            "New Company Name!");
    operationList.add(builder.build());

Я прочитал документацию ContactContracts и первоначально следовал этому учебнику . Я также проверил в AuthenticatorActivity пример в API безрезультатно. Любая помощь с благодарностью.

1 Ответ

9 голосов
/ 07 апреля 2011

Потратив утомительное количество времени на поиск правильного запроса, я считаю, что нашел ответ.Похоже, мне нужно было изменить BaseColumns._ID на ContactsContract.Data.CONTACT_ID, и для каждого обновления, которое я делал, мне также приходилось указывать тип mime, и я не видел этого нигде в документации по Android.В этой статье была найдена большая помощь: Работа с Android Контакты

        String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{String.valueOf(id), 
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    operationList
    .add(ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(orgWhere, orgWhereParams)
            .withValue(
                    ContactsContract.CommonDataKinds.Organization.DATA,
                    guCon.getCompany()).build());
...