안드로이드로 앱을 개발할때 가끔씩 전화 이력에 접근해야할 필요가 있을때가 있습니다. 이럴때에는 CallLog를 사용하면 편리한데요, 사용방법은 아래와 같습니다.


먼저 manifests 파일에 권한을 설정해주고요.


<uses-permission android:name="android.permission.READ_CALL_LOG"/>


그 다음은 코드를 구현해주면됩니다.


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);


    // 권한체크 코드 API.23 부터 귀찮아졌네요.

    int permissionCamera = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CALL_LOG);

    if (permissionCamera == PackageManager.PERMISSION_DENIED) 

    {

        // 권한이 없는경우 권한을 요청하는 Activity 호출

        ActivityCompat.requestPermissions(mainActivity, new String[]{Manifest.permission.READ_CALL_LOG}, REQUEST_CALL_LOG);

    } 

    else 

    {

        // 권한이 있으면 바로 전화목록 바로 접근

        loadContractHistory();

    }


}


@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {

        case REQUEST_CALL_LOG:

            for (int i = 0; i < permissions.length; i++) {

                String permission = permissions[i];

                int grantResult = grantResults[i];

                if (permission.equals(Manifest.permission.READ_CALL_LOG)) 

                {

                    if (grantResult == PackageManager.PERMISSION_GRANTED) 

                    {

                        // 권한 획득이후 전화 수신발신이력 조회

                        loadContractHistory();

                    } 

   else 

                    {

                        onBackPressed();

                    }

                    break;

                }

            }

            break;

    }

}


//----------------------------------------------------------------------------------------------
// 수신발신 이력 조회
//----------------------------------------------------------------------------------------------

void loadContractHistory()

{

    // CallLog를 사용할 수 있는지 권한체크

    int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CALL_LOG);


    if (permissionCheck == PackageManager.PERMISSION_GRANTED) 

    {

        Cursor cursor = getBaseContext().getContentResolver().query(CallLog.Calls.CONTENT_URI, 

                                 null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);


        if (cursor.getCount() > 0) 

        {

            while (cursor.moveToNext()) 

            {

                // 1 : 수신 , 2 : 발신 , 3 : 부재중

                int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));


                // 이름

                String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));

                

                // 통화시간

                int duration = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION));

            }

       } // end of if

    } // end of if

}


이렇게 구현해 주면 CallLog를 이용해서 전화 수신 및 발신 이력을 간단하게 조회할 수 있답니다.