Ответ 1
Вы не можете вставлять фотографии в журнал вызовов; они сохраняются в контакте, который связан с записью журнала вызовов. См. ContactsContract.Data для получения дополнительной информации о том, как это сделать.
Поскольку устройство HTC не обновляет журнал вызовов с существующей фотографией, его можно связать с тем, как HTC Sense кэширует записи журнала вызовов; Я видел похожие проблемы, которые появляются только на устройствах Sense.
Записи журнала вызовов обычно хранятся в таблице calls
в базе данных приложений контактов (/data/data/com.android.providers.contacts/databases/contacts2.db
). По какой-то причине кажется, что HTC Sense не обновляет существующие записи журнала вызовов, если контактные данные меняются, но другие ПЗУ делают.
Например, если я использую HTC EVO LTE с запасом Sense 5.0, чтобы позвонить кому-то, кого я сохранил как "Дженни Смит", запись создается в таблице calls
, которая включает в себя поле name
- где хранит Дженни Смит. Если я обновляю свою контактную информацию до "Jenny Jones" и добавлю новый вызов, новая запись будет сохранена в таблице calls
с именем Jenny Jones, но предыдущая запись не будет изменена. На экране фактической истории вызовов отображаются все вызовы как Jenny Jones, но сама база данных имеет старое имя.
Другие устройства, которые я тестировал (включая Nexus 5), обновляют предыдущие записи в таблице calls
при просмотре журнала вызовов. Ваше устройство Motorola, вероятно, ведет себя как Nexus 5, обновляя данные по мере необходимости.
Я не мастер базы данных, но имею достаточное количество знакомых с ними. С точки зрения структуры базы данных мне кажется странным, что любая контактная информация хранится в этой таблице calls
(она содержит поле raw_contacts_id
, которое связано с тем же поле в таблице contacts
этой базы данных, где вся фактическая контактная информация сохраняется), но это то, как она реализована.