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)에서 확인하실 수 있습니다.

댓글을 달아 주세요