투케이2K

363. (kotlin/코틀린) Phone Read Call Log 사용해 휴대폰 전화 통화 목록 로그 기록 확인 - CallLog.Calls 본문

Kotlin

363. (kotlin/코틀린) Phone Read Call Log 사용해 휴대폰 전화 통화 목록 로그 기록 확인 - CallLog.Calls

투케이2K 2023. 7. 31. 07:58

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

 

    <!-- ============================================================= -->
    <!-- [전화 통화 기록 로그 확인] -->
    <!-- ============================================================= -->
    <uses-permission android:name="android.permission.READ_CALL_LOG" />



        // -----------------------------------------------------------------------------------------
        // TODO [SEARCH FAST] : [RETURN] get_Phone_Call_Log : 안드로이드 통화 기록 조회
        // -----------------------------------------------------------------------------------------
        fun get_Phone_Call_Log(mContext: Context): ArrayList<HashMap<String, Any>>? {

            /**
             * // -----------------------------------------
             * [get_Phone_Call_Log 메소드 설명]
             * // -----------------------------------------
             * 1. 안드로이드 통화 기록 조회
             * // -----------------------------------------
             * 2. 호출 방식 :
             *
             * C_App.get_Phone_Call_Log(A_Intro@this)
             *
             * // -----------------------------------------
             * 3. 리턴 데이터 : 최근 통화 목록 기록
             * // -----------------------------------------
             * 4. 참고 :
             *
             * 필요 퍼미션 : <uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>
             *
             * 사전 사용자로부터 해당 퍼미션 권한 취득 필요
             * // -----------------------------------------
             */


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

            try {

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


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

                    val callSet = arrayOf(CallLog.Calls.DATE, CallLog.Calls.TYPE, CallLog.Calls.NUMBER, CallLog.Calls.DURATION)

                    val c = mContext.contentResolver.query(CallLog.Calls.CONTENT_URI, callSet, null, null, null)

                    if (c != null) {

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

                        val number = c.getColumnIndex(CallLog.Calls.NUMBER) // [폰 번호]
                        val type = c.getColumnIndex(CallLog.Calls.TYPE) // [전화 타입]
                        val date = c.getColumnIndex(CallLog.Calls.DATE) // [일자]
                        val duration = c.getColumnIndex(CallLog.Calls.DURATION) // [통화 시간]

                        while (c.moveToNext()) {

                            val phNumber = c.getString(number)
                            val callType = c.getString(type)
                            val callDate = c.getString(date)
                            val callDayTime = Date(java.lang.Long.valueOf(callDate))
                            val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.KOREA)
                            val callDuration = c.getString(duration)
                            var dir: String? = null
                            val dircode = callType.toInt()

                            when (dircode) {
                                CallLog.Calls.OUTGOING_TYPE -> dir = "발신"
                                CallLog.Calls.INCOMING_TYPE -> dir = "수신"
                                CallLog.Calls.MISSED_TYPE -> dir = "부재중"
                                CallLog.Calls.REJECTED_TYPE -> dir = "종료"
                            }

                            val map = HashMap<String, Any>()
                            map["PhoneNumber"] = phNumber.toString()
                            map["CallType"] = dir.toString()
                            map["CallDate"] = simpleDateFormat.format(callDayTime).toString()
                            map["CallDurationSec"] = callDuration.toString()

                            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
        }

 

반응형
Comments