플로렌스라는 개발자

[android]간단하게 퍼미션 체크하는 라이브러리 TedPermission

프로그래밍/Android 2017.07.07 댓글 0 Plorence

목차

    6.0 마시멜로 이상에서는 창을 띄워 사용자의 확인을 받아야 정상적으로 사용이 가능합니다.

    그외에 버전은 Permission 만 추가해줘도 작동하는 버전이 있습니다.

    이것저것 생각하고 체크까지하면 복잡합니다.

    그래서 간단하게 퍼미션을 체크해주는 라이브러리가 바로 TedPermission 라이브러리 입니다.

     

    1.Gradle 추가

    1
    2
    3
    4
    dependencies {
        compile 'gun0912.ted:tedpermission:1.0.2'
    }
     
    cs

     

    2.리스너 생성

    권한을 허용하거나 허용되지 않았을때 결과를 만들어주는 리스너를 생성합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PermissionListener permissionlistener = new PermissionListener() {
        @Override
        public void onPermissionGranted() {
            Toast.makeText(Activity1.this"권한 허가", Toast.LENGTH_SHORT).show();
        }
     
        @Override
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(Activity1.this"권한 거부\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
        }
     
     
    };
     
    cs

    onPermissionGranted는 권한허용했을때, onPermissionDenied는 권한을 거부했을때 입니다.

    Oncreate안에 두었을때,앱을 실행할때마다 토스트가 뜨게됩니다.

    3.권한 체크 시작

    1
    2
    3
    4
    5
    6
    7
    new TedPermission(this)
     .setPermissionListener(permissionlistener)
     .setRationaleMessage("구글 로그인을 하기 위해서는 주소록 접근 권한이 필요해요")
     .setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
     .setPermissions(Manifest.permission.READ_CONTACTS)
     .check();
     
    cs

    TedPermission 클래스를 이용해서 권한체크를 시작합니다.

    .setRationaleMessage - 권한을 체크하는 창을 띄우기전에 허용해야하는 이유를 사용자에게 알려줍니다.

    .setDeniedMessage - 사용자가 거부했을때 알려줍니다. 다시 한번 사용자에게 권한을 허용할수있도록 유도하는 효과가 있습니다.

    .setPermissions - 체크할 퍼미션입니다. 

    1
    2
    3
    4
    5
    6
    7
    new TedPermission(this)
     .setPermissionListener(permissionlistener)
     .setRationaleMessage("구글 로그인을 하기 위해서는 주소록 접근 권한이 필요해요")
     .setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
     .setPermissions(Manifest.permission.READ_CONTACTS)
     .check();
     
    cs

     

    4.풀 소스

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    PermissionListener permissionlistener = new PermissionListener() {
        @Override
        public void onPermissionGranted() {
            Toast.makeText(Activity1.this"권한 허가", Toast.LENGTH_SHORT).show();
        }
     
        @Override
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(Activity1.this"권한 거부\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
        }
     
     
    };
    new TedPermission(this)
     .setPermissionListener(permissionlistener)
     .setRationaleMessage("구글 로그인을 하기 위해서는 주소록 접근 권한이 필요해요")
     .setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
     .setPermissions(Manifest.permission.READ_CONTACTS)
     .check();
     
    cs

     

    퍼미션 처음 허용후에만 onPermissionGranted를 발동시키고 싶을때

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    PermissionListener permissionlistener = new PermissionListener() {
        @Override
        public void onPermissionGranted() {
            boolean isFirstRun1 = prefs.getBoolean("isFirstRun_CheckPer",true);
            if(isFirstRun1){
            //할 행동을 if문안에 넣어준다.
            Toast.makeText(Activity1.this"권한 허가", Toast.LENGTH_SHORT).show();
                    }
            prefs.edit().putBoolean("isFirstRun_CheckPer",false).apply();
        }
        @Override
        public void onPermissionDenied(ArrayList<String> deniedPermissions) {
            Toast.makeText(Activity1.this"권한 거부\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
        }
    };
    new TedPermission(this)
     .setPermissionListener(permissionlistener)
     .setRationaleMessage("구글 로그인을 하기 위해서는 주소록 접근 권한이 필요해요")
     .setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
     .setPermissions(Manifest.permission.READ_CONTACTS)
     .check();
    cs
    동작 원리는 해당 라이브러리를 만드신 박상권님 블로그(http://gun0912.tistory.com/61)에서 확인하실 수 있습니다.

    댓글

    0