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