투케이2K

661. (Android/Java) Uri.parse content://sms 사용해 SMS 문자 내역 (기록) 읽기 본문

Android

661. (Android/Java) Uri.parse content://sms 사용해 SMS 문자 내역 (기록) 읽기

투케이2K 2023. 10. 2. 09:07

[개발 환경 설정]

개발 툴 : AndroidStudio

 

[소스 코드]

        // ---------------------------------------------------------------
        // [로직 처리 실시]
        // ---------------------------------------------------------------
        try {

            /**
             * ------------------------------------
             * [요약 설명]
             * ------------------------------------
             * 1. Uri.parse("content://sms") : sms 문자 발신 및 수신 기록 내역을 확인할 수 있습니다
             * ------------------------------------
             * 2. 필요 퍼미션 :
             *
             * <uses-permission android:name="android.permission.READ_SMS"/>
             * ------------------------------------
             * 3. 참고 :
             *
             * content://sms >> 수신 및 발신 sms 메시지 모든 내역
             * content://sms/inbox >> sms 로 수신된 메시지 보관함
             * content://sms/sent >> sms 발신 완료 후 발신된 메시지 보관함
             * content://sms/draft >> sms 미완성 메시지 보관함
             * content://sms/outbox >> sms 발신 중인 메시지 보관함
             * content://sms/failed >> sms 실패 메시지 보관함
             * content://sms/conversations >> 대화 보관함
             *
             *
             * content://mms >> 수신 및 발신 mms 메시지 모든 내역
             * content://mms/inbox >> mms 로 수신된 메시지 보관함
             * content://mms/sent >> mms 발신 완료 후 발신된 메시지 보관함
             * content://mms/draft >> mms 미완성 메시지 보관함
             * content://mms/outbox >> mms 발신 중인 메시지 보관함
             * content://mms/scrapSpace >> 사용자가 사진과 같은 미디어를 첨부할 때 저장하는 임시 보관함
             *
             *
             * [예외 접근 기기]
             * 삼성 : 특정 갤럭시 시리즈 (주로 갤럭시 A 시리즈) : content://com.sec.mms.provider/message 또는 content://com.btb.sec.mms.provider/message
             * LG : content://com.lge.messageprovider/msg
             * ------------------------------------
             * */


            // [Uri.parse : SMS 수신 목록 확인]
            Uri uri = Uri.parse("content://sms/inbox");
            ContentResolver cr = getContentResolver();


            // [커서 생성]
            Cursor c = cr.query(uri, new String[] { "_id", "thread_id", "address", "person", "date", "body" }, null, null, "date DESC");


            // [sms 목록을 저장하기 위한 배열 선언]
            ArrayList<HashMap<String, Object>> readSms = new ArrayList<>();
            
            
            // [반복 문을 돌면서 데이터 읽기]
            while (c.moveToNext()) {

                long messageId = c.getLong(0);

                long threadId = c.getLong(1);

                String address = c.getString(2);

                long contact = c.getLong(3);
                String contactId = String.valueOf(contact);

                long timeStamp = c.getLong(4);
                SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E요일", Locale.KOREA);
                String date = dayTime.format(new Date(timeStamp));

                String body = c.getString(5);

                // [해쉬 맵 생성 데이터 삽입]
                HashMap<String, Object> map = new HashMap<>();
                map.put("messageId", messageId);
                map.put("threadId", threadId);
                map.put("address", address);
                map.put("contactId", contactId);
                map.put("date", date);
                map.put("body", body);

                // [배열에 삽입]
                readSms.add(map);

            }
            c.close();


            // [로그 결과 출력]
            S_Log._D_("SMS 읽기 결과 확인", new String[]{
                    new Gson().newBuilder().setPrettyPrinting().create().toJson(readSms)
            });

        }
        catch (Exception e){
            e.printStackTrace();
        }
 

[결과 출력]

 

D///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.A_Intro.onCreate(A_Intro.java:429)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2023-09-27 09:13:41 수요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: SMS 읽기 결과 확인]
I/: ----------------------------------------------------
I/: [LOG :: [
      {
        "threadId": 13,
        "date": "2023-09-26 11:00:09 화요일",
        "address": "#CMAS#Severe",
        "contactId": "0",
        "messageId": 683,
        "body": "[서울특별시청] 오늘 국군의 날 행사로 교통통제 예정이오니 우회하시기 바랍니다."
      }
    ]]
D///===========//: ================================================

 

반응형
Comments