본문 바로가기
안드로이드 자바

[Android][Java] 내 연락처 가져오기

by teamnova 2023. 1. 20.
728x90

안녕하세요. 오늘은 4대 컴포넌트 중 하나인 Content Provider를 이용해 내 연락처 정보를 가져와 보겠습니다.

ContentResolver를 이용해 ContentProvider에 접근한 후 휴대전화에 있는 연락처를 가져오겠습니다.

 

먼저 연락처에 접근하기 위해 permission을 얻어야 합니다. AndroidMenifest.xml에 아래와 같이 permission을 추가합니다.

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

그리고 권한을 얻기 위해 다음 코드를 추가하겠습니다.

private void requirePermission(){
    String[] permissions = {Manifest.permission.READ_CONTACTS};
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS);
    if(permissionCheck == PackageManager.PERMISSION_DENIED){
        ActivityCompat.requestPermissions(this, permissions, 0);
    }
}

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 0){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                GetContact();
            }else {
            }
        }

    }

requirePermission 함수는 Oncreate에서 호출하시면 됩니다.

 

onRequestPermissionsResult를 통해 권한 요청 결과를 받아 허용할 시에 호출할 GetContact() 함수에 관한 코드는 아래와 같습니다.

private void GetContact(){
        ContentResolver resolver = context.getContentResolver();
        Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String[] projection = { ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                ,  ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
                ,  ContactsContract.CommonDataKinds.Phone.NUMBER};

        Cursor cursor = resolver.query(phoneUri, projection, null, null, null);
        if(cursor != null){
            while(cursor.moveToNext()){
                int nameIndex = cursor.getColumnIndex(projection[1]);
                int numberIndex = cursor.getColumnIndex(projection[2]);
                String name = cursor.getString(nameIndex);
                String number = cursor.getString(numberIndex);
                number = number.replace("-","");
                Log.d("GetContact", "이름 : " + name + " 번호 : " + number);
            }
        }
        // 데이터 계열은 반드시 닫아줘야 한다.
        cursor.close();
    }

다음은 전체 코드입니다.

public class MainActivity extends AppCompatActivity {
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        requirePermission();
    }
    private void GetContact(){
        ContentResolver resolver = context.getContentResolver();
        Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String[] projection = { ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                ,  ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
                ,  ContactsContract.CommonDataKinds.Phone.NUMBER};

        Cursor cursor = resolver.query(phoneUri, projection, null, null, null);
        if(cursor != null){
            while(cursor.moveToNext()){
                int nameIndex = cursor.getColumnIndex(projection[1]);
                int numberIndex = cursor.getColumnIndex(projection[2]);
                String name = cursor.getString(nameIndex);
                String number = cursor.getString(numberIndex);
                number = number.replace("-","");
                Log.d("GetContact", "이름 : " + name + " 번호 : " + number);
            }
        }
        // 데이터 계열은 반드시 닫아줘야 한다.
        cursor.close();
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 0){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                GetContact();
            }else {
            }
        }

    }
    private void requirePermission(){
        String[] permissions = {Manifest.permission.READ_CONTACTS};
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS);
        if(permissionCheck == PackageManager.PERMISSION_DENIED){
            ActivityCompat.requestPermissions(this, permissions, 0);
        }
    }
}

 

실행을 해보면 내 연락처에 있는 모든 정보들이 로그로 찍히는것을 확인하실 수 있으실겁니다.