[ANDROID] Contents Provider를 이용한 전화번호 선택 예제 미분류

얼마전부터 간단하게 만들고 있는 애플리케이션에 필요한 기능이라 찾아보다가
엄청난(?) 삽질을 해댔다. 삽질을 한 이유를 꼽자면, 2.0이전과 이후의 접근방식에 변경이 있다고 할까?
그래서 인터넷에 있는 정보들이 좀 뒤섞이기도 하고, 폰에 따라 에러를 뱉어 내기도 한다.
일단 내가 사용한 방법은 갤럭시S2에서 정상 동작을 확인했다.
전화번호선택 화면을 불러올 버튼에 Intent.ACTION_PICK 인텐트를 등록하고, ContactsContract.Contacts.CONTENT_TYPE를 set하고
startActivityForResult 메소드로 인텐트를 실행한다.
이렇게 실행하게 되면
이런 화면까지 불러오게 된다. 연락처는 블러처리!
아까 startActivityForResult메소드로 실행되었으므로 이 화면에서 연락처를 선택하게 되면
onActivityResult메소드가 실행되게 된다.
필요없는 부분은 블러처리 해버리고, onActivityResult를 통해서 Intent할때 넣어줬던 PICK_CONTACT가 돌아오면 실행!
따로 메소드를 만들어서 처리했다.
이런 형태로 등록하게 되면 아래 로그에 찍은 것 처럼 이름과 전화번호를 불러올 수 있다.
필요한 소스를 정리하게 되면 아래와 같다.
static final int PICK_CONTACT = int값;
Intent contact_picker = new Intent(Intent.ACTION_PICK);
contact_picker.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(contact_picker, PICK_CONTACT);
//여기까지는 연락처를 불러오기 위한 코드
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_CONTACT && resultCode == RESULT_OK){
Log.d("INNOVER", "request OK_PICKCONTACT");
Uri dataUri = data.getData();
                        Cursor cursor = managedQuery(dataUri, null, null, null, null);
while (cursor.moveToNext()) {
int getcolumnId=cursor.getColumnIndex(ContactsContract.Contacts._ID);
String id = cursor.getString(getcolumnId);
people_Name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(hasPhoneNumber.equalsIgnoreCase("1")) {
hasPhoneNumber = "true";
}else {
hasPhoneNumber = "false";
}
if(Boolean.parseBoolean(hasPhoneNumber)) {
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+" = "+id, null, null);
while(phones.moveToNext()) {
people_Number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close(); // End
}
Log.d("test", "name: "+people_Name);
Log.d("test", "number: "+people_Number);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
String값은 사전에 전역변수로 등록해 뒀었고...
암튼 이형태로 하면 안정적으로 동작하는 걸 확인했다.

덧글

댓글 입력 영역