обновление имени контакта сохраняет последний контакт в течение секунды - PullRequest
0 голосов
/ 26 апреля 2020

, когда я обновляю имя контакта с помощью следующего кода, он создает новый контакт из исходного контакта на несколько секунд, а затем удаляет его.

String where = ContactsContract.Data.RAW_CONTACT_ID+" = ? AND "+ContactsContract.Data.MIMETYPE+" = ?";
String[] agrs = {"1",ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
        ArrayList<ContentProviderOperation> ops = new ArrayList<>();
        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                .withSelection(where, agrs)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "googleName")
                .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, null)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "googleName")
                .build());
        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            e.printStackTrace();
        }

(Этот необработанный контакт получен из Google, у которого есть WhatsApp номер). Перед выполнением этого обновления таблицы выглядят следующим образом: -

Необработанная таблица

Account type | contact_id | _id
com.google     6            1
com.whatsapp   6            2

таблица контактов:

Display Name | _id    | name_row_contact_id
Lorem          6        1

После операции переименования таблица контактов выглядит следующим образом: -

Display Name | _id    | name_row_contact_id
googleName   | 6      | 1
Lorem        | 6      | 2    //---> Why its happening ??

* Через несколько секунд после операции обновления этот Lorem будет удален *

!!! когда это происходит, мое приложение считает, что новый контакт добавляется, а затем снова удаляется :( !!!

Я что-то не так делаю, когда обновляю имя контакта ??

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 27 апреля 2020

Я нашел причину проблемы и решение.

Когда я меняю имя с идентификатором строки, очевидно, он будет переименовываться, но другие мобильные приложения, такие как WhatsApp, также имеют запись в базе данных, где имя еще не изменилось. Вот почему Edge 7-device создает новую запись в таблице контактов, так как старое имя все еще присутствует в таблице данных (используется whatsApp). Через некоторое время, когда WhatsApp делает Syn c, этот старый контакт удаляется.

Решение: Идеально, зачем переименовывать, если вы переименовываете не по row_id, а по contact_id. Он также переименует имена других записей в таблице данных.

    String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
            String[] agrs = {contactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...