반응형

permission 물어보기위한 공통 사항

  public static final String[] permissionList = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_PHONE_STATE};

    public static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 200;

- Common이라는 class안에 저장해서 쓰고있습니다. 아래도 자주 등장하니 참고해 주세요

- permissionList에 원하는 퍼미션을 넣어서 사용하면 됩니다.

permission 물어보기

        if (PermissionUtil.haveAllpermission(IntroActivity.this,Common.permissionList)){
            // 모든 퍼미션 허용
        }
        else{
           // 퍼미션 하나로도 허용 안함
           ActivityCompat.requestPermissions(mactivity,Common.permissionList,Common.MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
        }

- PermissionUtil에 haveAllpermission 펑션을 이용해 체크한다.

permission 결과 받기 -> onRequestPermissionsResult

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {


        //region 요청 코드가 PERMISSIONS_REQUEST_CODE 이고,
        // 요청한 퍼미션 개수만큼 수신되었다면
        if ( requestCode == Common.MY_PERMISSIONS_REQUEST_READ_PHONE_STATE && 
        		grantResults.length == Common.permissionList.length) {
                
            boolean check_result = true;

            // 모든 퍼미션을 허용했는지 체크합니다.
            for (int result : grantResults) {
                if (result != PackageManager.PERMISSION_GRANTED) {
                    check_result = false;
                    break;
                }
            }

            //허용
            if ( check_result ) {
				//허용했을때 로직
            }
            //거부 ,재거부
            else {
                if (PermissionUtil.recheckPermission(this,Common.permissionList)){
                   //거부 눌렀을 때 로직
                }
                else{
                   //재거부 눌렀을 때 로직
                }
            }
        }
        //end region
    }

- onRequestPermissionsResult에서 결과를 받아 허용,거부,재거부일때 진행되는 로직을 설정해줍니다. 여기까지 하시면 몇가지가 안될것입니다.

 

-PermissionUtil class가 없는데 이제 만들러 가봅시다.

 

permission Util 만들기

public class PermissionUtil {


    /*
     * true : all permission granted
     * false : some permission deni
     * */
    public static boolean haveAllpermission(Context c , String[] s){
        boolean ispms = true;
        for (String pms : s ){
            if (ContextCompat.checkSelfPermission(c, pms) != PackageManager.PERMISSION_GRANTED  ) {
                ispms = false;
                break;
            }
        }
        return ispms;
    }

    /*
    * true : 사용자가 거부만 선택한 경우에는 앱을 다시 실행하여 허용을 선택하면 앱을 사용할 수 있습니다.
    * false : “다시 묻지 않음”을 사용자가 체크하고 거부를 선택한 경우에는 설정(앱 정보)에서 퍼미션을 허용해야 앱을 사용할 수 있습니다.
    * */
    public static boolean recheckPermission (Activity activity ,String[] permissions){
        boolean isrpms = false;
        for (String s : permissions){
            if (ActivityCompat.shouldShowRequestPermissionRationale(activity, s)){
                isrpms = true;
                break;
            }
        }
        return isrpms;
    }


}

- haveAllPermission은 모든 퍼미션들이 허용상태일땐 true를 아닐경우 false를 반환합니다.

- recheckPermission은 거부만 눌럿을때 true, 재거부를 눌럿을때 false를 반환합니다.

- 만들고보니 메소드 이름이 이상해서 바꾸실분들은 바꿔주세요 .. ㅋㅋㅋ

반응형

+ Recent posts