Android Application
    
        
            Kotlin 콘텐트 프로바이더(Content Provider) : 통화 기록을 가져오기        
    
    
        
        작성자 임베디드코리아
        작성일23-10-23 23:14
        조회3,577회
        댓글0건
    
    
        
    
    
    
         
    
    
    
    
    
    
    
        
        
        
        Kotlin 콘텐트 프로바이더(Content Provider) : 통화 기록을 가져오기
-------------------------------------------------------------------------------------
      activity_main.xml
-------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btnCall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="통화 기록 가져오기" />
    <EditText
        android:layout_weight="1"
        android:id="@+id/edtCall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:background="#eee8aa" />
</LinearLayout>
------------------------------------------------------------------------------------
    MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
    lateinit var btnCall: Button
    lateinit var edtCall: EditText
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.READ_CALL_LOG), Context.MODE_PRIVATE)
        btnCall = findViewById<Button>(R.id.btnCall)
        edtCall = findViewById<EditText>(R.id.edtCall)
        btnCall.setOnClickListener {
            edtCall.setText(findCallHistory())
        }
    }
    fun findCallHistory(): String {
        var callSet = arrayOf(CallLog.Calls.DATE, CallLog.Calls.TYPE, CallLog.Calls.NUMBER, CallLog.Calls.DURATION)
        var c = contentResolver.query(CallLog.Calls.CONTENT_URI, callSet, null, null, null)
        if ( c!!.count == 0 )
            return "통화기록 없음"
        var callBuff = StringBuffer() //  ִ  100   ȭ
        callBuff.append("\n       날짜        :   구분   :       전화번호       :  통화시간 \n\n")
        c.moveToFirst()
        do {
            var callDate = c.getLong(0)
            var datePattern = SimpleDateFormat("yyyy-MM-dd")
            var date_str = datePattern.format(Date(callDate))
            callBuff.append(" $date_str  :")
            if (c.getInt(1) == CallLog.Calls.INCOMING_TYPE)
                callBuff.append("   착신   :   ")
            else
                callBuff.append("   발신   :   ")
            callBuff.append(c.getString(2) + "   :        ")
            callBuff.append(c.getString(3) + "초\n")
        } while (c.moveToNext())
        c.close()
        return  callBuff .toString
     }
}
------------------------------------------------------------------------------------
    themes.xml
------------------------------------------------------------------------------------
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.ContentProviderCallDATA" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#FF9800</item>
        <item name="colorPrimaryDark">#00897B</item>
    </style>
    <style name="Theme.ContentProviderCallDATA" parent="Base.Theme.ContentProviderCallDATA" />
</resources>