2012-01-17 2 views
2

Я пытаюсь вставить новый вызов на свой HTC программно.Как заставить активность последних вызовов показывать имя контакта при вставке

ContentValues values = new ContentValues(); 
values.put(android.provider.CallLog.Calls.NUMBER, someNumber); 
values.put(android.provider.CallLog.Calls.CACHED_NAME, someName); 
values.put(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE, 0); 
values.put(android.provider.CallLog.Calls.CACHED_NUMBER_LABEL, ""); 
values.put(android.provider.CallLog.Calls.DATE, someTime); 
values.put(android.provider.CallLog.Calls.DURATION, someDuration); 
values.put(android.provider.CallLog.Calls.NEW, 1); 
contentResolver.insert(uri, values); 

Ну, вызов появляется в списке, но я всегда вижу (неизвестно), а не CACHED_NAME. Тот же код хорошо работает на Samsung, но по какой-то причине отстал от HTC. Это ошибка, подобная поведению на HTC, или я пропустил некоторые вещи здесь?

Любая помощь приветствуется.

ответ

2

Alrighty. После глубокого расследования я выяснил причину. HTC устройства по какой-то причине извлекаются имена вызывающих абонентов из другого поля под названием «CNAME», а не

android.provider.CallLog.Calls.CACHED_NAME="name" 

Используя следующее будет делать трюк:

String static final HTC_CACHED_NAME="cname" 
if (isHTCDevice) 
    values.put(HTC_CACHED_NAME, someName); 
... 

Позвольте мне знать!

+0

Я пробовал обходное решение, но получаю исключение на моем HTC Desire HD, работающем под управлением 2.3.3. Вам удалось найти другое обходное решение? – Fasaxc

+0

У вашего HTC есть другое название поля, которое я считаю. Попробуйте сбросить имена столбцов и узнать, какое имя использует ваше устройство. – Aleyna

+0

mine использует «имя» и все еще не делает это правильно, HTC сосет X- ( – Saqib