투케이2K

364. (kotlin/코틀린) [Android 13] [유틸 파일] get_Phone_Contract : 휴대폰에 저장된 연락처 확인 실시 - READ_CONTACTS 본문

Kotlin

364. (kotlin/코틀린) [Android 13] [유틸 파일] get_Phone_Contract : 휴대폰에 저장된 연락처 확인 실시 - READ_CONTACTS

투케이2K 2023. 7. 31. 08:16

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] get_Phone_Contract : 휴대폰에 저장된 연락처 확인 실시
        // -----------------------------------------------------------------------------------------
        fun get_Phone_Contract(mContext: Context): ArrayList<HashMap<String, Any>>? {

            /**
             * // -----------------------------------------
             * [get_Phone_Contract 메소드 설명]
             * // -----------------------------------------
             * 1. 안드로이드 통화 기록 조회
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * C_App.get_Phone_Contract(A_Intro@this)
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 : 휴대폰에 저장된 연락처 확인 실시
             * // -----------------------------------------
             * 4. 참고 :
             *
             * 필요 퍼미션 : <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
             * // -----------------------------------------
             */


            // [리턴 변수 선언]
            var returnData: ArrayList<HashMap<String, Any>>? = null
            var errorFlag = false
            var m_log = ""

            try {

                // [사전 퍼미션 권한 부여 상태 체크]
                if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
                } else {
                    errorFlag = true
                    m_log = "[ERROR] : READ_CONTACTS : Permission Not Granted"
                }


                // [로직 수행 실시]
                if (errorFlag == false) {

                    val c = mContext.contentResolver.query(
                        ContactsContract.Contacts.CONTENT_URI,
                        null, null, null,
                        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + " asc"
                    )

                    if (c != null) {

                        m_log = "[SUCCESS] : READ_CONTACTS : READ"
                        returnData = ArrayList()

                        while (c.moveToNext()) {

                            var id = "" // 연락처 ID 값
                            var name = "" // 연락처 대표 이름
                            var phone_number = "" // 연락처 번호
                            try {
                                val c_id = c.getColumnIndex(ContactsContract.Contacts._ID)
                                val c_display_name_primary = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)

                                id = c.getString(c_id) // [id]
                                name = c.getString(c_display_name_primary) // [name]

                                val phoneCursor = mContext.contentResolver.query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,
                                    null, null
                                )

                                if (phoneCursor!!.moveToFirst()) {
                                    val c_num = phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
                                    phone_number = phoneCursor.getString(c_num) // [phone number]
                                }
                                phoneCursor.close()

                            } catch (e: Exception) {
                            }

                            val map = HashMap<String, Any>()
                            map["id"] = id
                            map["name"] = name
                            map["phone"] = phone_number

                            returnData.add(map) // [리턴 배열에 추가]
                        }
                    } else {
                        m_log = "[ERROR] : Cursor Is Null"
                    }
                }

            } catch (e: Exception) {
                S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e)
                m_log = "[EXCEPTION] : " + e.message.toString()
            }


            // [로그 출력 실시]
            //*
            // ===============================================================
            S_Log._D_("휴대폰에 저장된 연락처 확인 실시", arrayOf(
                "M_LOG :: $m_log",
                "RETURN :: " + returnData.toString()
            ))
            // ===============================================================
            // */


            // [리턴 반환 실시]
            return returnData
        }
 

[결과 출력]

 

D///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.kotlinproject.C_App$Companion.get_Phone_Contract(C_App.kt:5459)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2023-07-27 08:51:31 목요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: 휴대폰에 저장된 연락처 확인 실시]
I/: ----------------------------------------------------
I/: [LOG :: M_LOG :: [SUCCESS] : READ_CONTACTS : READ]
I/: ----------------------------------------------------
I/: [LOG :: RETURN :: [{phone=010-1234-5678, name=#(주) 투케이 대리, id=124}]
D///===========//: ================================================

 

반응형
Comments