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);
}
}
}
실행을 해보면 내 연락처에 있는 모든 정보들이 로그로 찍히는것을 확인하실 수 있으실겁니다.
'안드로이드 자바' 카테고리의 다른 글
[안드로이드 자바] Matisse 라이브러리 사용하기 (0) | 2023.01.24 |
---|---|
[Android][Java] 토스트 메시지 꾸미기 2 (0) | 2023.01.23 |
[JAVA][Android] BadgeDrawable을 활용하여 바텀 네비게이션 바에 뱃지 구현 (0) | 2023.01.16 |
[Java][Android] viewBinding 사용하기 (0) | 2023.01.15 |
[Java][Android] 마커 클릭 비활성화 (클릭 막기) (0) | 2023.01.13 |