안드로이드 개발 전화번호 조회 퍼미션 에러 해결하는 방법 |
환경: Android Studio |
전화번호를 조회하기 위해서는 사용자의 허락을 필요로 합니다. 예전과 달리 AndroidManifest.xml 에 퍼미션을 추가한다고 해서 해결되지는 않습니다. 연락처 조회를 위해 getContentResolver().query() 를 호출했는데 다음과 같은 에러가 난다면 Activity 에서 onRequestPermissionsResult() 를 상속 받아 구현해야 합니다.
Permission Denial: opening provider requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
▼ 먼저 AndroidManifest.xml 에 사용자 정보를 읽고 쓸 수 있는 퍼미션을 추가해야 합니다. 만약 추가하지 않으면 사용자에게 허가를 요구하는 팝업창이 나타나지 않습니다.
▼ 다음은 퍼미션 요청을 사용자에게 보여주기 위한 소스를 추가해야 합니다. 함수에서는 checkSelfPermission() 함수를 이용해서 READ_SMS 가 Granted 되었는지 체크합니다. 만약 원하는 퍼미션이 없다면 requestPermissions() 를 호출합니다. 두 번째 파라미터 값인 PERMISSIONS_REQUEST_READ_CONTACTS 는 사용자가 임의로 정합니다.
// Request code for READ_CONTACTS. It can be any number > 0. private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100; private static final int PERMISSIONS_REQUEST_WRITE_CONTACTS = 101; private void callPermission() { // Check the SDK version and whether the permission is already granted or not. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { requestPermissions( new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED){ requestPermissions( new String[]{Manifest.permission.WRITE_CONTACTS}, PERMISSIONS_REQUEST_WRITE_CONTACTS); } else { // 해당 로직으로 이동 setPhoneList(); } }
▼ requestPermissions() 요청한 결과는 onRequestPermissionsResult() Callback 함수로 넘어옵니다. 인수로 넘어오는 requestCode = PERMISSIONS_REQUEST_READ_CONTACTS 와 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 를 체크합니다. 만약 참이라면 연락처 정보 조회를 위한 함수를 실행할 수 있겠죠.
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission is granted setPhoneList(); } else { Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show(); } } }
▼ requestPermissions() 함수를 호출하면 사용자 화면에 연락처에 대한 엑세스 권한을 줄 것인지 묻습니다. 런타임에 다른 주요 권한을 요청하려면 위와 같은 방법을 사용해야 합니다.
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 Android GPS 정보 알아오기 (63) | 2018.04.07 |
---|---|
안드로이드 콘솔에서 adb shell 에러 해결하는 방법 (0) | 2018.03.30 |
안드로이드 개발 자료 관리를 위한 SharedPreferences 사용하는 방법 (0) | 2018.03.24 |
안드로이드 개발 DB 변경 결과 이후 작업을 위한 옵져버 ContentObserver 활용하는 방법 (0) | 2018.03.24 |
안드로이드 개발 SMS 조회 퍼미션 에러 해결하는 방법 (0) | 2018.03.07 |
안드로이드(Android) Debug 모드 상태 체크하는 방법 (0) | 2018.03.01 |
안드로이드 개발 Vibration 이용해서 스마트폰 진동 설정하는 방법 (0) | 2018.02.22 |
안드로이드 개발 SensorManager, SensorEventListener 이용해서 나침판 구현하기 (0) | 2018.02.12 |
녹두장군1님의
글이 좋았다면 응원을 보내주세요!