Notice
Recent Posts
Recent Comments
Link
투케이2K
661. (Android/Java) Uri.parse content://sms 사용해 SMS 문자 내역 (기록) 읽기 본문
[개발 환경 설정]
개발 툴 : 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///===========//: ================================================
반응형
'Android' 카테고리의 다른 글
Comments