투케이2K

609. (Android/Java) Phone Read Call Log 사용해 휴대폰 전화 통화 목록 로그 기록 확인 - CallLog.Calls 본문

Android

609. (Android/Java) Phone Read Call Log 사용해 휴대폰 전화 통화 목록 로그 기록 확인 - CallLog.Calls

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

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

 

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


    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [RETURN] get_Phone_Call_Log : 안드로이드 통화 기록 조회
    // -----------------------------------------------------------------------------------------
    public static ArrayList get_Phone_Call_Log(Context mContext) {

        /**
         * // -----------------------------------------
         * [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" />
         * 
         * 사전 사용자로부터 해당 퍼미션 권한 취득 필요
         * // -----------------------------------------
         * */


        // [리턴 변수 선언]
        ArrayList<HashMap<String, Object>> returnData = null;

        boolean errorFlag = false;
        String 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){

                String[] callSet = new String[] { CallLog.Calls.DATE, CallLog.Calls.TYPE, CallLog.Calls.NUMBER, CallLog.Calls.DURATION };
                Cursor c = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, callSet, null, null, null);

                if (c != null){

                    m_log = "[SUCCESS] : READ_CALL_LOG : READ";
                    returnData = new ArrayList<>();
                    
                    int number = c.getColumnIndex(CallLog.Calls.NUMBER); // [폰 번호]
                    int type = c.getColumnIndex(CallLog.Calls.TYPE); // [전화 타입]
                    int date = c.getColumnIndex(CallLog.Calls.DATE); // [일자]
                    int duration = c.getColumnIndex(CallLog.Calls.DURATION); // [통화 시간]

                    while (c.moveToNext()) {

                        String phNumber = c.getString(number);
                        String callType = c.getString(type);
                        String callDate = c.getString(date);

                        Date callDayTime = new Date(Long.valueOf(callDate));
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss", Locale.KOREA);

                        String callDuration = c.getString(duration);

                        String dir = null;
                        int dircode = Integer.parseInt(callType);
                        switch (dircode) {
                            case CallLog.Calls.OUTGOING_TYPE:
                                dir = "발신";
                                break;

                            case CallLog.Calls.INCOMING_TYPE:
                                dir = "수신";
                                break;

                            case CallLog.Calls.MISSED_TYPE:
                                dir = "부재중";
                                break;

                            case CallLog.Calls.REJECTED_TYPE:
                                dir = "종료";
                                break;
                        }

                        HashMap <String, Object> map = new HashMap<>();
                        map.put("PhoneNumber", String.valueOf(phNumber));
                        map.put("CallType", String.valueOf(dir));
                        map.put("CallDate", String.valueOf(simpleDateFormat.format(callDayTime)));
                        map.put("CallDurationSec", String.valueOf(callDuration));

                        returnData.add(map);
                    }

                }
                else {
                    m_log = "[ERROR] : Cursor Is Null";
                }

            }

        } catch (Exception e) {
            S_Log._printStackTrace_(mContext, S_FinalMsg.LOG_BUG_STATE, null, e);
            m_log = "[EXCEPTION] : " + String.valueOf(e.getMessage());
        }


        // [로그 출력 실시]
        //*
        // ===============================================================
        S_Log._D_("안드로이드 통화 기록 조회 실시", new String[]{
                "M_LOG :: " + String.valueOf(m_log),
                "RETURN :: " + String.valueOf(returnData)
        });        
        // */


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

 

반응형
Comments