본문 바로가기
Android

[깡샘의 안드로이드 프로그래밍] 정리 16 - 주소록 앱 연동

by 들풀민들레 2018. 1. 5.

 

본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

 

 

 

14장. 인텐트와 구글 기본 앱 연동

 

14.2.1. 주소록 앱

 

구글의 기본 앱을 연동할 때 가장 많이 이용되는 앱 중 하나가 주소록입니다. 주소록 앱을 연동하여 주소록 목록 화면을 띄우고 그 목록에서 사용자가 선택한 항목의 전화번호나 이메일을 가져오는 사례가 많습니다.

 

Intent intent = new Intent(Intent.ACTION_PICK);

intent.setData(ContactsContract.Contacts.CONTENT_URI);

startActivityForResult(intent, 10);

 

Action 문자열을 Intent.ACTION_PICK, 데이터 정보를 ContactsContract.Contacts.CONTENT_URI로 설정하여 인텐트를 발생시키면 주소록의 목록 화면이 뜨게 됩니다. 

결과를 되돌려받고자 startActivityForResult ( ) 함수를 이용한 예입니다. 

목록 액티비티가 실행된 후 사용자 선택으로 다시 되돌아왔을 때 onActivityResult ( ) 함수가 자동으로 호출되는데요. 이곳에서 넘어온 결괏값을 확인할 수 있습니다.

 

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if(requestCode==10 && resultCode==RESULT_OK){

String result=data.getDataString();

resultView.setText(result);

}

}

 

onActivityResult ( ) 함수에서 넘어온 결괏값을 단순히 화면에 출력한 예입니다.

 

 

만약 사용자가 주소록 목록 화면에서 홍길동을 선택하여 되돌아왔다고 가정 했을 때 인텐트의 data.getDataString ( ) 함수를 이용하여 넘어온 URL 값을 얻을 수 있는습니다. 이때 URL 정보의 맨 마지막 단어가 선택한 홍길동의 식별자가 됩니다. 이런 식으로 식별자값을 얻은 후 구체적인 전화번호나 이메일 등의 값을 다시 가져와야 하는데요. 이 부분은 앱과 앱 간의 데이터 부분이므로 콘텐츠 프로바이더 부분에서 다루겠습니다.

 

위의 예에서 주소록 목록 화면을 띄우기 위해 인텐트를 발생시킬 때 setData ( ) 함수의 Uri 값을 다양하게해서 목록 화면에 출력되는 데이터를 조정할 수 있습니다. 예에서는 ContactsContract.Contacts.CONTENT_URI를 이용하였으므로 목록 화면에 가장 기초 정보인 사람 이름만 보이게 됩니다.

 

  • ContactsContract.Contacts.CONTENT_URI: 사람 이름
  • ContactsContract.CommonDataKinds.Phone.CONTENT_URI: 사람 이름과 전화번호
  • ContactsContract.CommonDataKinds.Email.CONTENT_URI: 사람 이름과 이메일

 

주소록 앱의 액티비티를 인텐트로 실행하여 한 사람에 대한 상세보기 화면을 띄울 수 있습니다.

 

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_URI+"/"+1066));

startActivity(intent);

 

Action 문자열이 Intent.ACTION_VIEW이며 Data 정보는 Uri.parse (ContactsContract.Contacts.CONTENT_URI+"/"+1066)로 주어야 하는데, 맨 마지막 숫자는 주소록 쪽의 id 값입니다.