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 |
댓글