Notice
Recent Posts
Recent Comments
Link
투케이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
}
반응형
'Kotlin' 카테고리의 다른 글
Comments