안드로이드 2.0 이상 주소록 삽입

|

2.0이상부터는 다중 계정을 지원하여 주소록부분이 상당히 난해해졌다.

RawContact, Data, Contact라는 단어가 많이 나오는데 이것들에 대해 설명해보면....

rawContact는 우리가 쉽게 생각하는 전화번호와 이름이 있는 하나의 주소록이다. 
Data는 주소록의 내용이다. 예를 들면 주소록에 내용 (전화번호,이름,이메일) 이다.
Contact는 하나 혹은 그 이상의 주소록집합(rawContact)들이 모인것이다. 계정마다 홍길동이란 사람의 주소록이 중복 저장되어 있을 가능성이 높다. 이런 경우에 내부적으로 결합되어 중복된 홍길동을 하나의 홍길동으로 만들어서 보여준다.


Contact라는 것은 명시적으로 생성 시킬 수 없다.
대신 RawContact를 삽입할 때에 적절한 Contact를 찾고 적절한것을 찾았다면 raw contact의 contact_id 열은 이 해당 contact의 id를 얻게 된다. 만약에 찾지 못한다면 새로운 contact를 생성한다.


<주소록에 삽입하는 예제>

//rawContact를 삽입한다.
ContentValues values = new ContentValues();
  values.put(ContactsContract.RawContacts.CONTACT_ID, 0);
  values.put(ContactsContract.RawContacts.AGGREGATION_MODE, ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED);
  Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
  long rawContactId = ContentUris.parseId(rawContactUri);

//Data를 삽입한다.

  values.clear();
  values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
  values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
  values.put(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_HOME);
  values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "01055556666");
  Uri dataUri = this.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
  Log.e("Data.phone put", dataUri.toString());

  values.clear();
  values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
  values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
  values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "호윤");
  values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "박");
  values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,"호윤이");
  dataUri = this.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
  Log.e("Data.StructuredName put", dataUri.toString());
  
  values.clear();
  values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
  values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
  values.put(ContactsContract.CommonDataKinds.Email.TYPE,ContactsContract.CommonDataKinds.Email.TYPE_MOBILE);
  values.put(ContactsContract.CommonDataKinds.Email.DATA1, "surprisen85@naver.com");
  dataUri = this.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
  Log.e("Data.StructuredName put", dataUri.toString());

저작자 표시 비영리 변경 금지
신고
Trackback 0 And Comment 0