투케이2K

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

Android

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

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

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [RETURN] get_Phone_Contract : 휴대폰에 저장된 연락처 확인 실시
    // -----------------------------------------------------------------------------------------
    public static ArrayList get_Phone_Contract(Context mContext) {

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


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

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

                Cursor c = mContext.getContentResolver().query(
                        ContactsContract.Contacts.CONTENT_URI,
                        null, null, null,
                        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY + " asc");

                if (c != null){

                    m_log = "[SUCCESS] : READ_CONTACTS : READ";
                    returnData = new ArrayList<>();

                    while (c.moveToNext()) {

                        String id = ""; // 연락처 ID 값
                        String name = ""; // 연락처 대표 이름
                        String phone_number = ""; // 연락처 번호

                        try {

                            int c_id = c.getColumnIndex(ContactsContract.Contacts._ID);
                            int 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]

                            Cursor phoneCursor = mContext.getContentResolver().query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,
                                    null, null);

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

                            phoneCursor.close();
                        }
                        catch (Exception e){}

                        HashMap <String, Object> map = new HashMap<>();
                        map.put("id", String.valueOf(id));
                        map.put("name", String.valueOf(name));
                        map.put("phone", String.valueOf(phone_number));

                        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;
    }
 

[결과 출력]

 

D///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.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