2010-10-25 2 views
2

Je souhaite créer une application pour ajouter des informations personnelles aux contacts dans Android. Je suis en mesure d'ajouter le nom, numéro de téléphone, etc., en utilisant le code suivant:Ajouter une ville et une rue aux données personnelles dans Android

intent addContactIntent = new Intent(Contacts.Intents.Insert.ACTION, Contacts.People.CONTENT_URI); 
addContactIntent.putExtra(Contacts.Intents.Insert.NAME, "myname"); 
addContactIntent.putExtra(Contacts.Intents.Insert.PHONE, "232323222"); 
addContactIntent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.Phones.TYPE_MOBILE); 

Mais le problème est que dans le champ d'adresse il y a ville, rue, etc., et là, je ne suis pas en mesure d'ajouter Les données.

Répondre

1

peut-être un peu en retard, mais nous espérons toujours serviable pour tous ceux qui ont le même problème:

Même si Contacts.Intents.Inserts est amorti, la ContactsContract.Intents.Insert API ne prévoit toujours pas la ville en ajoutant, rue etc. via intention. Pour résoudre le problème, vous devez le faire par programmation en utilisant le ContactsContract API. Voici ma solution:

D'abord je réponds à certains "addContactEvent" - dans mon cas, un clic sur un bouton - avec un Toast. Ma méthode addContactToAddressBook renvoie l'ID d'une ressource de chaîne qui décrit le résultat de l'action.

int resultId = addContactToAddressBook(myContactObject, this); 
Toast.makeText(this, getString(resultId), Toast.LENGTH_SHORT).show(); 

Ensuite, j'ajouter beaucoup d'informations au carnet d'adresses de contact comme la rue, la ville, le nom ... Les informations sont stockées dans un contactobject.

public int addContactToAddressBook(MyContactObject contact, Context context){ 

    // is contact already in contacts?? 
    if(contact != null && !numberAlreadyInContacts(contact.getPhoneNumber(), context)){ 

     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
     int rawContactInsertIndex = ops.size(); 

     // prepare Contact 
     ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
      .withValue(RawContacts.ACCOUNT_TYPE, null) 
      .withValue(RawContacts.ACCOUNT_NAME, null) 
      .build()); 

     // Insert First- and LastName 
     if(contact.getFirstName() != null && contact.getLastName() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(StructuredName.DISPLAY_NAME, "Lost Symbol Characters") 
       .withValue(StructuredName.GIVEN_NAME, contact.getFirstName()) 
       .withValue(StructuredName.FAMILY_NAME, contact.getLastName()) 
       .build()); 
     } 

     // Insert Organistion and JobTitle 
     if(contact.getOrganisation() != null && contact.getJobTitle() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE) 
       .withValue(Organization.COMPANY, contact.getOrganisation()) 
       .withValue(Organization.TYPE, Organization.TYPE_WORK) 
       .withValue(Organization.TITLE, contact.getJobTitle()) 
       .withValue(Organization.TYPE, Organization.TYPE_WORK) 
       .build());    
     } 

     // Insert Email 
     if(contact.getEmailAddress() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE) 
       .withValue(Email.DATA, contact.getEmailAddress()) 
       .withValue(Email.TYPE, Email.TYPE_WORK) 
       .build());    
     } 

     // Insert PhoneNumber 
     if(contact.getPhoneNumber() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
       .withValue(Phone.NUMBER, contact.getPhoneNumber()) 
       .withValue(Phone.TYPE, Phone.TYPE_WORK)     
       .build());    
     } 

     // Insert MobileNumber 
     if(contact.getMobileNumber() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
       .withValue(Phone.NUMBER, contact.getMobileNumber()) 
       .withValue(Phone.TYPE, Phone.TYPE_MOBILE)     
       .build());    
     } 

     // Insert Address 
     if(contact.getStreetAddress() != null && contact.getPostalCode() != null && contact.getLocation() != null && contact.getCountry() != null){ 
      ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
       .withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE) 
       .withValue(StructuredPostal.COUNTRY, contact.getCountry()) 
       .withValue(StructuredPostal.POSTCODE, contact.getPostalCode()) 
       .withValue(StructuredPostal.CITY, contact.getLocation()) 
       .withValue(StructuredPostal.STREET, contact.getStreetAddress()) 
       .build());    
     } 

     // add to DB 
     try { 
      context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
      return R.string.contact_added; 

     } catch (RemoteException e) { 

      return R.string.adding_contact_failed; 

     } catch (OperationApplicationException e) { 

      return R.string.adding_contact_failed; 
     } 

    } else if(contact != null && numberAlreadyInContacts(contact.getPhoneNumber(), context)){ 

     return R.string.contact_exists; 

    } else { 

     return R.string.adding_contact_failed; 
    } 
} 

Dans cette méthode, j'essaie de savoir si le contact est déjà dans mon carnet d'adresses. Par conséquent, je cherche le numéro de téléphone, car il devrait être unique sur tous les contacts.

private boolean numberAlreadyInContacts(String number, Context context) { 

    if(number == null && number.length()<1){ 
     return false; 
    } 

    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

    ContentResolver contentResolver = context.getContentResolver(); 
    Cursor contactLookup = contentResolver.query(uri, new String[] {BaseColumns._ID, 
      ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null); 

    if (contactLookup != null && contactLookup.getCount() > 0) { 
     contactLookup.close(); 
     return true; 
    } 

    contactLookup.close(); 
    return false; 
} 

Amusez-vous avec ce code!

Chris

Questions connexes