2010-12-08 4 views
8

J'essaie d'ajouter un contact dans Android en utilisant getContentResolver. D'abord, je créé un ArrayList:API de contact stockant le contact comme un contact invisible: comment le rendre visible?

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

ensuite rempli la liste de tableau par

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()); 

et enfin dans un bloc try

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

quand j'Excecute, je ne reçois pas erreur ou exception. Mais le contact n'apparaît pas dans les contacts Android. Quand je récupère les contacts invisibles, je peux trouver ce contact. Quelqu'un peut-il comprendre ce qui ne va pas?

+1

Probablement une question stupide mais sur le réglage du téléphone avez-vous rendre visible seulement le contact avec les numéros. – Terrance

+1

Une autre chose que j'aimerais ajouter est que certains téléphones vous permettent de sélectionner uniquement les contacts qui appartiennent à certains groupes Google (quel que soit votre configuration). Si un nouveau contact ne fait pas partie de l'un de ces groupes, vous ne le verrez pas. Vérifiez votre compte GMail et voyez si le contact a été correctement synchronisé là-haut. –

+0

@Terrance: puis-je savoir si vous connaissez la réponse ou non? il n'y a rien à voir avec la prise de contact visible ... même dans mon application si je veux récupérer ces contacts, je ne peux utiliser que le drapeau invisible. – Ads

Répondre

9
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(); 
} 

ce code fonctionne!

+0

cela ne fonctionne pas. null comme un type de compte et le nom ne fonctionne pas sur certains téléphones. – Creniale

+0

@Creniale toute autre solution ??? poster ici il sera utile – Ads

+0

Merci pour les solutions – blessenm