2015-09-15 1 views
0

Я использую ContactsContract для вставки RawContacts в мое приложение. Следующий код (и показ вставленного контакта в контактном приложении) работает на всех устройствах, но не на Sony Xperia (Android 4.4.4).Android, Insert RawContact не отображается на Sony Xperia

ContentValues p=new ContentValues(); 
p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, getActivity().getPackageName()); 
p.put(ContactsContract.RawContacts.ACCOUNT_NAME,  
DataHelper.getAppName(getActivity())); 
Uri rowcontact = null; 
long rawcontactid = 0; 
try { 
    rowcontact = getActivity().getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, p); 
    rawcontactid = ContentUris.parseId(rowcontact); 
    Log.d(DEBUG_KEY, "CONTACT ADDED: " + rawcontactid); 
}catch(Exception e){ 
    Log.d(DEBUG_KEY, "CONTACT ADDED FAILED 1: " + e.getMessage()); 
    return ""; 
} 

На устройстве Sony Xperia отсутствует ошибка или исключение. На консоли отображается правильный идентификатор CONTACT-ADDED-ID. Но в приложении для контакта android недавно вставленный (Raw) -Contact не отображается. Я включил все группы и т. Д. В настройках фильтра в контактном приложении.

+0

Какова цель установки 'ACCOUNT_TYPE' в' getActivity(). GetPackageName() '? – pskink

+0

Из документации google: для обеспечения уникальности новые типы учетных записей следует выбирать в соответствии с соглашением об именах Java-пакетов. Таким образом, учетная запись Google имеет тип «com.google» http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html – appagenturbw

+0

, но вы хотите добавить контакт в «учетную запись Google», t вы (чтобы приложение-приложение могло видеть его)? – pskink

ответ

0

Хорошо. Проблема решена. На Sony Xperia устройств вы должны

(1) Укажите существующий (Google) счет

p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google"); 
p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "google_account_username_on_device"); 

или (2) не указывать какую-либо деталь типа счета

//p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google"); 
//p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "google_account_username_on_device"); 

На других устройствах, таких как Motorola или Google Nexus, вы можете указать не существующую пользовательскую учетную запись:

p.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "my.app.name"); 
p.put(ContactsContract.RawContacts.ACCOUNT_NAME, "APP NAME"); 
+0

спасибо @pskink за подсказку – appagenturbw

+0

Это отстойное время. Когда я хочу использовать свою собственную учетную запись: контакты не отображаются, и имя не может быть сохранено. (только у Sony) – Roel

 Смежные вопросы

  • Нет связанных вопросов^_^