본문 바로가기
개발/앱

안드로이드 전화 수신 발신 이력조회 코드 (Android CallLog)

by 해피류 2017. 6. 24.

안드로이드로 앱을 개발할때 가끔씩 전화 이력에 접근해야할 필요가 있을때가 있습니다. 이럴때에는 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를 이용해서 전화 수신 및 발신 이력을 간단하게 조회할 수 있답니다.