-
[Android] ContentResolver로 연락처가져오기~~!Android📱 2023. 5. 30. 21:47
개발 중 연락처를 가져와서 전화번호부를 기능을 만들어야 해서
찾아본 ContentResolver로 연락처 가져오기~~~
안드로이드 기기는 본래가 핸드폰인지라
연락처를 저장하는 기능이 존재한다.
그리고 앱개발을 하다 보면 이걸 가지고 와야 하는 경우도 존재하게 된다.
그럴 때 사용하는 것이 ContentResolver이다.
공식문서에 나와있는 방식으로도 가능
https://developer.android.com/training/contacts-provider/retrieve-names
연락처 목록 검색 | Android 개발자 | Android Developers
연락처 목록 검색 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 과정에서는 다음 기법을 사용하여 데이터가 전체 또는 일부 검색 문자열과 일치하는 연
developer.android.com
근데 deprecatede 된 코드도 많고 적당한 예시가 아닌 거 같아서
ContentResolver를 이용해서 구현했다.
private fun getProjection() = arrayOf( ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER ) private fun ContentResolver.getCursor(projection: Array<String>) = query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null ) fun onLoadContact(resolver: ContentResolver): List<ContactViewModel.Contact> { val projection = getProjection() val cursor = resolver.getCursor(projection) val contactList = mutableListOf<ContactViewModel.Contact>() if (cursor != null) { while (cursor.moveToNext()) { val nameIndex = cursor.getColumnIndex(projection[0]) val numberIndex = cursor.getColumnIndex(projection[1]) val name = cursor.getString(nameIndex) val number = cursor.getString(numberIndex) contactList.add(ContactViewModel.Contact(name, number)) } } cursor?.close() return contactList }
위 코드를 사용하면 전화번호부의 모든 이름과 전화번호를 가져올 수 있다.
getProjection에 가져오고 싶은 정보를 추가해 주면 다른 데이터도 얻어올 수 있다.
원리는 ContentResolver의 커서를 이용해서 무한으로 테이블에 있는 데이터를 긁어오는 간단한 방식이다.
'Android📱' 카테고리의 다른 글
[Android] Compose Click event 추가하기 (0) 2023.06.08 Realm vs Room (0) 2023.06.01 [Android] Compose State (0) 2023.05.16 [Compose] ML kit으로 바코드 읽고, OCR을 해보자 (0) 2023.05.04 Android Full Screen 화면 만들기~~~ (0) 2023.03.20