Контактный API, сохраняющий контакт как невидимый контакт: как сделать его видимым?

Я пытаюсь добавить контакт в Android, используя getContentResolver. Сначала я создал ArrayList:

ArrayList<ContentProviderOperation> ops =
  new ArrayList<ContentProviderOperation>();

затем заполнил список массивов

int rawContactInsertIndex = ops.size();

ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
   .withValue(ContactsContract.RawContacts.ACCOUNT_NAME,accountName)
   .build());

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex)
   .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
   .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
   .build());

и, наконец, в блоке try

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

когда я выполняю это, я не получаю никаких ошибок или исключений. Но контакт не появляется в контактах Андроида. Когда я получаю невидимые контакты, я могу найти этот контакт. Может ли кто-нибудь понять, что происходит не так?


person Ads    schedule 08.12.2010    source источник
comment
Наверное тупой вопрос, но в настройках телефона у вас видим только контакты с номерами.   -  person Terrance    schedule 08.12.2010
comment
Еще одна вещь, которую я хотел бы добавить, это то, что некоторые телефоны позволяют вам отображать только контакты, которые принадлежат к определенным группам Google (в зависимости от того, что вы настроили). Если новый контакт не входит ни в одну из этих групп, вы его не увидите. Проверьте свою учетную запись GMail и проверьте, правильно ли был синхронизирован контакт.   -  person Jason L.    schedule 08.12.2010
comment
@Terrance: могу я узнать, знаешь ли ты ответ или нет? нет ничего общего с тем, чтобы сделать контакт видимым ... даже в моем приложении, если я хочу получить эти контакты, я могу использовать только невидимый флаг.   -  person Ads    schedule 08.12.2010
comment
@Jason: у меня нет никакой группы в моем эмуляторе, но я все же могу добавить и просмотреть контакт. как это возможно?   -  person Ads    schedule 08.12.2010
comment
@Adhavan Этого не будет в вашем приложении, это будет в разделе контакты-›меню-›Параметры отображения-›Только контакты с телефонами. Как я уже сказал, здесь может быть глупый вопрос, но мне было любопытно, каким был ответ, и имел ли какое-либо значение его выбор. Если бы я был абсолютно уверен в ответе, я бы опубликовал официальный ответ.   -  person Terrance    schedule 08.12.2010
comment
@Terrance: ха-ха, я знаю, что есть видимые и невидимые контакты. Во-первых, знаете ли вы, что мы можем получить наши встроенные контакты в наше приложение? Вы здесь не для того, чтобы давать глупые ответы и комментарии, подобные этому. контакты БД есть? когда я зарегистрировался в этой базе данных, все контакты, добавленные из моего приложения, получают невидимый флаг как true, а родное приложение для контактов получает значение флага как false. Я надеюсь, что вы сможете изучить контактный API и вернуться!   -  person Ads    schedule 08.12.2010
comment
Чувак, что со всей ненавистью. Я не пытался быть ослом или что-то в этом роде. Мне просто было любопытно узнать об этой простой вещи, из-за которой ты, похоже, расстроился. Я сказал, что у меня нет ответа. Вы сказали, что нет ничего общего с видимостью контактов. Я неправильно понял то, что вы там сказали, что это означает, что нет никакого способа сделать это. В конце концов, нет такой вещи, как глупый вопрос, и то, как вы сказали, что не было никаких очевидных ошибок, и когда ваш невидимый контакт ArrayList был получен, поэтому id звучало как простое объяснение проблемы.   -  person Terrance    schedule 08.12.2010
comment
Контакт отображается в невидимом и не в обычном списке ХММММММ Может быть, это потому, что он невидимый, а в вашем эмуляторе отмечены только контакты с телефонами. Я бы сказал, что это вполне резонный вопрос.   -  person Terrance    schedule 08.12.2010
comment
Может быть, это потому, что он невидим, и в вашем эмуляторе отмечены только контакты с телефонами - я уверен, что вы не разработчик Android! бесполезно с тобой спорить   -  person Ads    schedule 08.12.2010
comment
@Terrance, ты пометил этот комментарий или кто-то другой? Кроме того, @Adhavan обычно считает дурным тоном грубость по отношению к людям, пытающимся вам помочь. Кроме того, Ти, помнишь, что я говорил об андроиде? да. Довольно.   -  person    schedule 09.12.2010
comment
@Will: я не был груб, так как я не знал ответа на этот вопрос ... как он может сказать, что мой вопрос - глупый вопрос или глупый вопрос?   -  person Ads    schedule 10.12.2010
comment
@Adhavan LOL Я вижу проблему! @Terrance говорил, что вопрос, который ОН задавал ВАМ, можно считать глупым. Он не говорил, что ваш вопрос глуп! Он был скромным, а не грубым.   -  person    schedule 10.12.2010
comment
Да, извините за пропущенную связь. Я имел в виду тебя без обид.   -  person Terrance    schedule 11.12.2010
comment
@Уилл,@Терренс: Извини! я думаю, что я неправильно понял!   -  person Ads    schedule 13.12.2010


Ответы (1)


 ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
 op_list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
      //.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT)
        .build()); 

     // first and last names
 op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference(Data.RAW_CONTACT_ID, 0)
        .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
        .withValue(StructuredName.GIVEN_NAME, name)
        .withValue(StructuredName.FAMILY_NAME, name)
        .build());

 op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference(Data.RAW_CONTACT_ID, 0)
        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
        .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,  Phone.TYPE_MOBILE)
        .build());

  op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
         .withValueBackReference(Data.RAW_CONTACT_ID, 0)
       .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
         .withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
         .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
         .build());

try{
     ContentProviderResult[] results = getContentResolver().
                                 applyBatch(ContactsContract.AUTHORITY, op_list);
}catch(Exception e){
     e.printStackTrace();
} 

этот код работает!

person Ads    schedule 09.12.2010
comment
это не работает. null в качестве типа учетной записи и имени не работает на некоторых телефонах. - person Creniale; 25.10.2011
comment
Для работы каждого телефона вам потребуется тип учетной записи и имя учетной записи. Один из возможных способов — позволить пользователю выбирать, к какой учетной записи он хочет добавить контакты. (сохраните выбор как ресурс и используйте его повторно) - person Creniale; 22.11.2011
comment
Я могу вставить контакт. Но проблема в установке мелодии контакта. Как я могу достичь этого. - person sachi; 25.09.2012
comment
@Ads Хорошая работа, только этот код работал у меня после долгого RND. - person Farhana Naaz Ansari; 03.04.2018