2010-12-08 3 views
8

getContentResolver을 사용하여 Android에 연락처를 추가하려고합니다. 먼저 나는 ArrayList 생성 :연락처를 보이지 않는 연락처로 저장하는 API에 문의 : 어떻게 보이게 할 수 있습니까?

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

에 의해 마지막으로 try 블록에 채워 다음 배열 목록을

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

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

내가이 excecute 때, 나는 어떤을 받고 있지 않다 오류 또는 예외. 그러나 연락처가 Android 연락처에 나타나지 않습니다. 보이지 않는 연락처를 검색하면이 연락처를 찾을 수 있습니다. 어떤 일이 잘못되고 있는지 알아낼 수 있습니까?

+1

아마 전화 설정에서 전화를 걸면 전화 번호 만 표시됩니다. – Terrance

+1

내가 추가하고 싶은 또 다른 점은 일부 휴대 전화에서는 특정 Google 그룹에 속한 연락처 (설정에 관계없이) 만 표시하도록 선택할 수 있다는 것입니다. 새 연락처가 해당 그룹 중 하나에 속하지 않으면 해당 그룹을 볼 수 없습니다. Gmail 계정을 확인하고 연락처가 올바르게 동기화되었는지 확인하십시오. –

+0

@Terrance : 내가 대답을 알고 있는지 아닌지 알 수 있습니까? 연락처를 볼 수있는 것과 아무 상관이 없습니다.이 연락처를 가져 오려면 내 앱에서라도 보이지 않는 플래그 만 사용할 수 있습니다. – Ads

답변

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

이 코드가 작동합니다.

+0

이 작동하지 않습니다. 계정 유형으로 null을 사용하고 일부 휴대 전화에서는 이름이 작동하지 않습니다. – Creniale

+0

@Creniale 다른 해결책 ??? 여기에 게시하십시오 유용 할 것입니다 – Ads

+0

해결책 주셔서 감사합니다 – blessenm

관련 문제