Как программно вставить записи в журнал звонков с отображаемым именем и фотографией? - PullRequest
12 голосов
/ 15 января 2011

Я могу программно вставить запись в журнал вызовов Android с номером, датой, продолжительностью и типом, НО не могу понять, как добавить фотографию, ярлык и имя? Запись, которую я добавляю, предназначена для существующего контакта с точно таким же номером. Я заметил, что на устройстве Motorola имя и картинка появляются, если номер совпадает с существующим контактом, но в моем 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);

Ответы [ 2 ]

2 голосов
/ 01 марта 2014

Вы не можете вставлять фотографии в сам журнал вызовов;они хранятся в Контакте, который связан с записью в журнале вызовов.См. ContactsContract.Data для получения дополнительной информации о том, как это сделать.

Поскольку устройство HTC не обновляет журнал вызовов с существующей фотографией, оно может быть связано с тем, как HTCSense кеширует записи в журнале вызовов;Я видел похожие проблемы, которые появляются только на устройствах Sense.

Записи журнала вызовов обычно хранятся в таблице calls в базе данных приложения «Контакты» (/data/data/com.android.providers.contacts/databases/contacts2.db).По некоторым причинам, кажется, что HTC Sense не обновляет существующие записи журнала вызовов, если контактные данные изменяются, но другие ПЗУ делают.

Например, если я использую HTC EVO LTE со стоковой Sense 5.0 для выполнения вызовадля кого-то, кого я сохранил как «Дженни Смит», в таблице calls создается запись, которая включает в себя поле name, в котором хранится Дженни Смит.Если я обновлю ее контактную информацию на «Дженни Джонс» и сделаю ей новый вызов, в таблице calls будет сохранена новая запись с именем Дженни Джонс, но предыдущая запись не изменится.Фактический экран истории вызовов показывает все вызовы как Дженни Джонс, но сама база данных имеет старое имя.

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

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

1 голос
/ 03 марта 2014

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

...