2010-10-25 53 views
2

我想创建一个应用程序,向Android中的联系人添加个人详细信息。我可以使用下面的代码添加的名称,电话号码等:在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); 

但问题是,在地址字段中有城市,街道等,在这里我不能添加数据。

回答

1

也许有点晚了,但希望仍然乐于助人的人谁具有相同的问题:

即使Contacts.Intents.Inserts折旧,该ContactsContract.Intents.Insert API仍然没有通过提供意向加入城市,街道等。要解决此问题,您必须通过使用ContactsContract API以编程方式执行此操作。这里是我的解决方案:

首先我回应一些“addContactEvent” - 在我的情况下点击一个按钮 - 用吐司。我的addContactToAddressBook方法返回描述操作结果的String Ressource的Id。

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

接下来,我将大量信息添加到联系人通讯录中,如街道,城市,名称......信息存储在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; 
    } 
} 

在这种方法中,我尝试了解联系人是否已经在我的地址簿中。因此,我查找电话号码,因为它应该在所有联系人中都是唯一的。

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; 
} 

玩这段代码!

Chris

相关问题