2010-10-25 56 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

相關問題