Как программно вставлять записи журнала вызовов С отображаемым именем и фотографией?

Я могу программно вставить запись в журнал вызовов Android с номером, датой, продолжительностью и типом, но я не могу понять, как включить фотографию, ярлык и имя? Запись, которую я добавляю, касается существующего контакта с таким же номером. Я заметил, что на устройстве Motorola имя & pic появляется, если число соответствует существующему контакту, но на моем HTC Incredible что-то не хватает?

Я делаю следующее .. (не знал, что даже попробовать для фото)

ContentValues values = new ContentValues(); values.put(CallLog.Calls.NUMBER, number); values.put(CallLog.Calls.CACHED_NAME, name); values.put(CallLog.Calls.CACHED_NUMBER_LABEL, label); values.put(CallLog.Calls.DATE, date); values.put(CallLog.Calls.DURATION, duration); values.put(CallLog.Calls.TYPE, myCallType); context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values); 

Solutions Collecting From Web of "Как программно вставлять записи журнала вызовов С отображаемым именем и фотографией?"

Вы не можете вставлять фотографии в журнал вызовов; Они сохраняются в контакте, связанном с записью журнала вызовов. Дополнительную информацию о том, как это сделать, см. В разделе 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 Smith , Если я обновляю свою контактную информацию до «Jenny Jones» и размещаю новый звонок, новая запись сохраняется в таблице calls с именем Jenny Jones, но предыдущая запись не изменяется. На экране «История вызовов» отображаются все вызовы как Jenny Jones, но сама база данных имеет старое имя.

Другие устройства, которые я тестировал (включая Nexus 5), обновляют предыдущие записи в таблице calls когда просматривается журнал вызовов. Возможно, ваше устройство Motorola ведет себя как Nexus 5, обновляя данные по мере необходимости.

Я не мастер базы данных, но имею разумное количество знакомых с ними. С точки зрения структуры базы данных мне кажется странным, что любая контактная информация хранится в этой таблице calls (она содержит поле raw_contacts_id , которое связано с тем же поле в таблице contacts этой базы данных, где все фактические контактные данные Хранится), но так оно и реализуется.

Единственный разумный способ сделать это (это работает для меня в любом случае) – это добавить контакт непосредственно к телефонной трубке, а затем добавить свой журнал вызовов, указывающий на этот контакт, после чего вы сможете удалить контакт с телефонной трубки. Единственная проблема с этим заключается в том, что ваше приложение будет убито до удаления контакта, поэтому вам придется выполнить какую-то очистку при следующем запуске приложения. Это очень грязно для того, что должно быть простой задачей.