안드로이드 개발 SMS 조회 퍼미션 에러 해결하는 방법 |
환경: Android Studio 3.0.0 |
메시지 전송을 위해서는 사용자의 허락을 필요로 합니다. 예전과 달리 AndroidManifest.xml 에 퍼미션을 추가한다고 해서 해결되지는 않습니다. SMS 조회를 위해 쿼리를 실행했는데 다음과 같은 에러가 난다면 Activity 에서 onRequestPermissionsResult() 를 상속 받아 구현해야 합니다.
Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms from pid=28132, uid=10080 requires android.permission.READ_SMS, or grantUriPermission()
▼ AndroidManifest.xml 에 퍼미션 코드를 추가합니다. 만약 추가하지 않으면 사용자에게 허가를 요구하는 팝업창이 나타나지 않습니다.
▼ 다음은 퍼미션 요청을 사용자에게 보여주기 위한 소스를 추가해야 합니다. 함수에서는 checkSelfPermission() 함수를 이용해서 READ_SMS 가 Granted 되었는지 체크합니다. 만약 원하는 퍼미션이 없다면 requestPermissions() 를 호출합니다. 두 번째 파라미터 값인 PERMISSIONS_REQUEST_READ_SMS 는 사용자가 임의로 정합니다.
private static final int PERMISSIONS_REQUEST_READ_SMS = 100; 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_SMS) != PackageManager.PERMISSION_GRANTED) { requestPermissions( new String[]{Manifest.permission.READ_SMS}, PERMISSIONS_REQUEST_READ_SMS); } else { // 해당 로직으로 이동 sendSMS(); } }
requestPermissions() 요청한 결과는 onRequestPermissionsResult() Callback 함수로 넘어옵니다. 인수로 넘어오는 requestCode = PERMISSIONS_REQUEST_READ_SMS 와 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 를 체크합니다. 만약 참이라면 SMS 를 보내는 함수를 실행할 수 있겠죠.
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_SMS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission is granted sendSMS(); } else { Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_LONG).show(); } } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드 콘솔에서 adb shell 에러 해결하는 방법 (0) | 2018.03.30 |
---|---|
안드로이드 개발 자료 관리를 위한 SharedPreferences 사용하는 방법 (0) | 2018.03.24 |
안드로이드 개발 DB 변경 결과 이후 작업을 위한 옵져버 ContentObserver 활용하는 방법 (0) | 2018.03.24 |
안드로이드 개발 전화번호 조회 퍼미션 에러 해결하는 방법 (0) | 2018.03.12 |
안드로이드(Android) Debug 모드 상태 체크하는 방법 (0) | 2018.03.01 |
안드로이드 개발 Vibration 이용해서 스마트폰 진동 설정하는 방법 (0) | 2018.02.22 |
안드로이드 개발 SensorManager, SensorEventListener 이용해서 나침판 구현하기 (0) | 2018.02.12 |
안드로이드 개발 레이아웃 인플레이션(LayoutInflater)으로 추가한 화면 삭제하는 방법 (0) | 2018.01.28 |