Android ContentObserver - Контакты - Нет обновлений присутствия

Я копался в структуре на ICS, и кажется, что ContactsProvider2 в поставщике контактов Android вызывает notifyChange после любой вставки/обновления, и не только это, он делает это:

NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork);

Это означает, что ЛЮБАЯ вставка/обновление/удаление в контактах AUTHORITY Uri запускает наблюдателей контента для получения обновления. Хотя в теории это довольно хорошо. Похоже, что это также запускается обновлениями присутствия.

Если я попытаюсь переместить курсор в таблицу данных, он также привяжет таблицу данных к присутствию, и любые обновления присутствия будут вызваны onLoadFinished (CursorLoader).

Изучая проблему с курсором, похоже, что это связано с тем, что ContactsProvider2 вызывает

setTablesAndProjectionMapForData() 

который, в свою очередь, добавляет столбцы Presnce/status к каждой строке данных.

appendContactPresenceJoin(sb, projection, RawContacts.CONTACT_ID);
appendContactStatusUpdateJoin(sb, projection, ContactsColumns.LAST_STATUS_UPDATE_ID);
appendDataPresenceJoin(sb, projection, DataColumns.CONCRETE_ID);
appendDataStatusUpdateJoin(sb, projection, DataColumns.CONCRETE_ID);

Есть ли способ зарегистрировать Content Observer для получения обновлений в таблице данных без фактического получения обновлений для изменений Presence? Я считаю, что присутствие было исключено из запросов Data.CONTENT_URI в 2.3/3.x.. Но похоже, что это изменилось..


person Chrispix    schedule 12.02.2013    source источник


Ответы (1)


Как насчет CONTENT_VCARD_URI?

person AlikElzin-kilaka    schedule 22.04.2013
comment
Не думайте, что это сработает, так как это относится к одному контакту. Моя проблема была в корпоративной среде. Немного сложно объяснить, но у нас был провайдер, который асинхронно агрегировал несколько результатов из выключенных и включенных ресурсов устройства, каждый раз, когда он возвращался, он уведомлял об изменении. На устройстве мы получили доступ к этому списку через загрузчик курсора. Но обновления уведомлений будут продолжать поступать и заставлять нас пытаться повторно объединиться с другими данными в БД. Чрезмерно сложный вариант использования, я не помню решения, которое мы сделали сейчас. - person Chrispix; 21.08.2015