-
안드로이드 기본 앱 연동하기 - 주소록 앱Android 2024. 9. 26. 16:56
주소록 앱 연동하기
먼저 주소록 앱 사용에 대한 퍼미션을 메니페스트에서 설정해줘야 한다.
<uses-permission android:name="android.permission.READ_CONTACTS"/>
이후, 주소록 앱 화면을 띄울려면 아래와 같은 코드를 작성하면 된다.
// 액션 문자열: ACTION_PICK // 데이터: ContactsContract.CommonDataKinds.Phone.CONTENT_URI val intent = Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI) requestContactsLauncher.launch(intent)
주소록 목록 화면은 액티비티이기 때문에 인텐트를 이용해 실행해야 한다.
데이터 정보에 들어가는 Uri 객체는 상수로, Uri.parse() 함수로 직접 지정해도 되지만, 다음과 같은 상수로 이용해도 된다.
ContactsContract.Contacts.CONTENT_URI 모든 사람의 데이터 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 전화번호가 있는 사람 ContactsContract.CommonDataKinds.Email.CONTENT_URI 이메일 정보가 있는 사람 사용자가 실행된 주소록 액티비티에서 한 사람을 선택하여 되돌아오면 requestContractsLauncher 에서 ActivityResultCallback 의 onActivityResult() 함수가 자동으로 실행된다.
위에 적은 변수 requestContractsLauncher 을 정의하는 코드는 다음과 같다.
val requestContactsLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { if(it.resultCode == RESULT_OK) { // 주소록 앱에서 전달한 결과 데이터 it.data.data } }
it.data.data 는 주소록에서 전달한 데이터로 URL 문자열 형태인데, 사용자가 선택한 사람의 식별값이다.
만약 사용자가 선택한 사람의 이름, 전화번호 등을 추가적으로 가져와야 한다면 위의 식별값을 조건으로
주소록 앱에 필요한 데이터를 다시 요청해야 한다. 이때는 주소록 앱의 콘텐츠 프로바이더를 사용한다.
val requestContactsLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { if(it.resultCode == RESULT_OK) { // 주소록 앱의 콘텐츠 프로바이더 이용 val cursor = ontentResolver.query( it.data.data, arrayOf<String>( ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, // 이름 ContactsContract.CommonDataKinds.Phone.NUMBER // 전화번호 ), null, null, null ) if(cursor.moveToFirst()) { val name = cursor.getString(0) val phone_number = cursor.getString(1) // 이후 binding 등으로 view 에 뿌려주기 } } }
'Android' 카테고리의 다른 글
액티비티간 데이터 전달 - startActivityForResult (0) 2024.10.10 안드로이드 기본 앱 연동하기 - 지도 앱, 전화 앱 (0) 2024.10.03 안드로이드 기본 앱 연동하기 - 카메라 앱 (0) 2024.09.19 서비스 생명주기 - startService/bindService (0) 2024.09.12 안드로이드 기본 앱과 연동하기 - 갤러리 앱 (3) 2024.09.05