상세 컨텐츠

본문 제목

안드로이드 권한 설정 및 체크하기(Android 6.0이상은 필수)

기능/안드로이드

by 강효재 2020. 7. 27. 12:21

본문

1. 권한 설정하기

권한 설정을 위해선 AndroidManifest.xml에 등록을 해야한다.

이 중 위험 권한의 경우 체크를 통해 사용자의 동의가 필요하다.

 

위험권한 종류 : https://developer.android.com/guide/topics/security/permissions?hl=ko

 

시스템 권한  |  Android 개발자  |  Android Developers

Permissions Google I/O 2015—Android M Permissions: Best Practices for Developers Android is a privilege-separated operating system, in which each application runs with a distinct system identity (Linux user ID and group ID). Parts of the system are…

developer.android.com

ex) <uses-permission android:name="android.permission.CAMERA"/>



2.권한 요청

단일 권한에 대해선 

if (ContextCompat.checkSelfPermission(this,

         Manifest.permission.CAMERA)

          != PackageManager.PERMISSION_GRANTED) {

         if (ActivityCompat.shouldShowRequestPermissionRationale(this,

                    Manifest.permission.CAMERA)) {

         } else {

           ActivityCompat.requestPermissions(this,

              new String[]{Manifest.permission.CAMERA},

              MY_PERMISSIONS_REQUEST_CAMERA);

   }

}

위와 같은 방식으로 요청한다. 다만 실제 앱개발 상황에서는 위험권한이 한 개뿐일리 없으므로 리스트에 넣어서 한 번에 하는것이 편리하다. (출처: https://bottlecok.tistory.com/49 [잡캐의 IT 꿀팁])

 

public static void checkAllPermission(Context context, int requestCode){

   PackageInfo packageInfo = null;
   String[] requestedPermissions = null;
   ArrayList<String> arrNeedPermissions = new ArrayList<>();

// 설정된 권한들 리스트화
   try {
      packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),               

      PackageManager.GET_PERMISSIONS);
      requestedPermissions = packageInfo.requestedPermissions;
   } catch (PackageManager.NameNotFoundException e) {
      e.printStackTrace();
   }

// 그 중에서 권한 부여 안 된것들 리스트화
   for(int i = 0; i < requestedPermissions.length; i++){

      if(DANGEROUS_PERMISSIONS.contains(requestedPermissions[i])) {
         if (ContextCompat.checkSelfPermission(context, requestedPermissions[i]) !=

            PackageManager.PERMISSION_GRANTED) {
            arrNeedPermissions.add(requestedPermissions[i]);
         }
      }
   }
   String[] arr = new String[arrNeedPermissions.size()];
// 리스트화된 권한들 요청
   if(arrNeedPermissions.isEmpty()){
   arr = new String[]{ALL_PERMISSION_GRANT};
   } else {
      arr = (String[]) arrNeedPermissions.toArray(arr);
   }
   ActivityCompat.requestPermissions((AppCompatActivity) context, arr, requestCode);
}


사용자가 팝업에 대한 처리를 끝마치면

onRequestPermissionsResult()메소드 쪽으로 들어온다.

 

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == PERMISSION_CHECK) {
            boolean isAllPermissionsGrant = true;
            for (int i = 0; i < grantResults.length; i++) {

                if (PermissionCheck.ALL_PERMISSION_GRANT.equals(permissions[i])) {
                    break;
                }
                if (grantResults[i] == -1) {
                    isAllPermissionsGrant = false;
                    break;
                }
            }

            if (isAllPermissionsGrant) {

                doStart();
            } else {
                finish();
            }
        }
    }

 이후의 처리는 상황에 맞게 하면 될 것이다.

관련글 더보기