2010-04-21 5 views
0

Quelqu'un peut-il m'aider à ajouter de nouveaux contacts dans le carnet d'adresses et à les appliquer par lots en utilisant la nouvelle API ContactsContract? Je n'ai pas trouvé de tutoriel approprié à ce sujet.Ajout de contacts à l'aide de ContactsContract dans le lot

Je peux ajouter un seul contact. Mais la mise à jour par lots échoue avec l'ajout de contacts inconnus.

Actuellement, je parcours une boucle tout en collectant des informations. des utilisateurs d'écrire, le stocker dans le ArrayList<ContentProviderOperation> et l'application et

ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list); 

Mais un seul contact est mis à jour avec le nom et les autres sont mis à jour en tant que contacts inconnus.

S'il vous plaît aider avec un exemple de code qui ajoute les champs comme le nom, surnom, mobile, titre, adresse électronique, id Skype, pays-travail, etc.

Toute aide? Merci .

+0

résolu ce problème avec l'aide de nouvel article http://developer.android.com/resources/articles /contacts.html – Pritam

Répondre

0

Ceci est mon code qui a fonctionné, vous pouvez ajouter les champs que vous avez besoin pour d'autres valeurs:

int backRefIndex = 0 

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

op_list.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null) 
          .build());  
       op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex).withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "My Name").build()); 

op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,backRefIndex).withValue(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER,"1234567890").withValue(Phone.TYPE,Phone.TYPE_MOBILE).withValue(Phone.TYPE, Phone.TYPE_WORK).build()); 

try { 
    ContentProviderResult[] result = context.getContentResolver().applyBatchContactsContract.AUTHORITY, op_list); 
} catch (OperationApplicationException exp) { 
    exp.printStackTrace(); 
} catch (RemoteException exp) { 
    exp.printStackTrace(); 
} 
0

Le code suivant ajoute l'entrée RawContact, puis ajoute le nom. Pour ajouter un autre champ, utilisez le code similaire utilisé pour l'ajout de Name avec les valeurs appropriées.

// Raw Contact 
    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); 
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name); 
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); 
    builder.withValue(RawContacts.SYNC1, username); 
    operationList.add(builder.build()); 

    // Name 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, entry.getName().getFullName().getValue()); 
    operationList.add(builder.build()); 

    try { 
     mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

HTH!

+0

Dans cet exemple, d'où proviennent account.name, account.type et nom d'utilisateur? – Chris

+0

Vous pouvez utiliser le nom et le type du compte lorsque vous utilisez un compte spécifique (par exemple, si vous avez synchronisé votre compte Gmail et souhaitez y ajouter un autre contact). L'option Sync1 est le nom d'utilisateur du compte, elle est utilisée pour stocker les informations de synchronisation locales. – Karan

Questions connexes