본문 바로가기

개발/안드로이드 소스분석

[안드로이드]apiDemos파해치기 6. App - QuickContactsDemos

2011/06/21 - [안드로이드/안드로이드 소스분석] - [안드로이드]apiDemos파해치기 5. App - persistent State


android : 
http://developer.android.com/reference/android/provider/Contacts.html

전화번호부의 데이터를 조회하는 방법과 ListView를 통해 조회 결과를 보여주는 기능이 QuickContactsDemos의 메인 기능입니다.

QuickContactsDemos에서는 cursor를 통한 query와 ResourceCursorAdapter의 사용을 보여주게되는데
Cursor는 추후 개발 시 DB를 사용하는데에 있어서 매우 자주 사용되므로 사용법을 익혀두시는것이 좋습니다.
 
ResourceCursorAdapter :
http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html 

기존에 제가 주로 사용하던 방법은 BaseAdapter를 상속받아 ListView의 View를 구성하는 방법이었는데 
ResourceCursorAdapter를 사용하는 방법이 조금더 간단한것 같기도 하고 어쨋든 각각의 장점이 있겠죠.
 
ResourceCursorAdapter에서는 bindView와 newView를 이용해서 ListView를 구성하게 됩니다.
 

QuickContactsDemo.class

CONTACTS_SUMMARY_PROJECTION 은 전부 Contacts의 멤버(라고하는게 맞는건지)로 구성이 되어있는데 
Cursor는보통위와 같은 방법으로 String배열을 통해 db의 field에 접근하게 됩니다.
그리고 getContentResolver().query를 확인해보면

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
위와같은 내용을 보실 수 있는데 projection과 selectionArgs의 차이점을 적어보자면
projection이 field를 말하는 것이라면 selection은 sql문의 where절에 해당하게 됩니다.
위에선 select라는 String 변수가 selection을 구성하고있네요.

그리고 startManagingCursor 를 통해 Cursor를 실행하게 됩니다.
중요한 것이 QuickContactsDemo.class는  기존처럼 Activity가 아닌 ListActivity를 상속받아 사용햇다는 것입니다. 사실 제 스스론 이런식으로 ListActivity를 상속받아서 사용해본적은 한번도 없지만 ListActivity에 대해서도 알아두는 것도 좋을듯 싶습니다.

ListActivity : 
http://developer.android.com/reference/android/app/ListActivity.html 

ListView를 구현하는 데에는 몇가지 과정이 필요합니다.
Adapter가 Data를 이용해 View를 만들고 그 Adapter를 ListView에 Set해주는 과정을 거쳐야 ListView가 일반적으로 보여지는 화면처럼 구성이 됩니다.


위 소스상에서 주요 체크 사항은 assignContactUri정도라고 생각이 되네요. 

void android.widget.QuickContactBadge.assignContactUri(Uri contactUri)

public void assignContactUri (Uri contactUri)

Since: API Level 5

Assign the contact uri that this QuickContactBadge should be associated with. Note that this is only used for displaying the QuickContact window and won't bind the contact's photo for you. Call setImageDrawable(Drawable) to set the photo.

Parameters
contactUri Either a CONTENT_URI or CONTENT_LOOKUP_URI style URI.  

영어가 약해서 구글번역기로 돌려보면

 QuickContactBadge와 관련되어야한다는 연락처 URI를 지정합니다. 이것QuickContact 창을 표시하는 데 사용됩니다 그리고 당신은 연락처의 사진을 바인딩하지 않습니다. 사진을 설정할 수 setImageDrawable (Drawable) 전화 

라고 되어있습니다. 
자주 느끼지만 구글번역기를 돌리면 정말 무슨말인지 정리가 잘 되지 않네요..
대충 이런게 아닌가 싶습니다.  
QuickContactBadge와 관련되어 사용되며, QuickContact window에만 사용되며, 이미지뷰의 setImageDrawable 같이 직접 이미지를 set하지 않아도 된다라는 거같네요.(맞나요?)

어쨋든 져도 이 기능은 주소록과 관련된 어플을 만든적이 없어서 한번도 사용해 보지 않았는데 나중에 필요하신분은 사용해보시면 좋을듯 싶네요.

이 apidemo에서는  가장중요한게 Cursor의 사용법과 ListView의 구성법 그리고 참고로 ListActivity를 상속받았다는점 정도겠네요.
수고하세요.