안드로이드 강의 들으면서 Dexter 라는 것이 나와서 좀 더 알아보려고 한다.
목차
Dexter
- github : Dexter
안드로이드 앱 권한 요청을 쉽게 할 수 있도록 도와주는 라이브러리이다.

요런 느낌으로 구현이 된다.
Dependency
dependencies{
implementation 'com.karumi:dexter:6.2.3'
}
karumi:dexter 이다.
Permission
크게는 Single Permission이랑 Multiple Permissions 로 나뉜다.
단일 권한만 요청 할 때는 Single을 쓰면 되겠지만
보통은 권한 여러개를 요청하기 때문에 Multiple Permissions 위주로 다뤄보겠다.
Multiple Permissions
Dexter.withContext(this)
.withPermissions(
Manifest.permission.CAMERA,
Manifest.permission.READ_CONTACTS,
Manifest.permission.RECORD_AUDIO
).withListener(new MultiplePermissionsListener() {
@Override public void onPermissionsChecked(MultiplePermissionsReport report) {/* ... */}
@Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {/* ... */}
}).check();
깃허브에 있는 예제코드이다.
withPermissions 랑 withListener 만 주의깊게 보면 된다.
withPermissions엔 보면 익숙할텐데 얻고자 하는 권한들을 써주면 되고
withListener는 그 권한의 리스너들이다.
리스너에 구현해야 하는 메소드는 2개이다.
- onPermissionsChecked
- onPermissionRationaleShouldBeShown
요렇게 2개
onPermissionsChecked 은 권한을 다 묻고 나서 호출이 되고 (허용이든 아니든)
onPermissionRationaleShouldBeShown 는 이전에 사용자가 한 번 권한을 거부 했으면 호출이 된다.
onPermissionsChecked 의 경우 MultiplePermissionsReport 요걸 전달받게 되는데
MultiplePermissionsReport 은 권한 획득/권한 거부와 같은 자세한 정보를 담고 있다.
예를 들면
MultiplePermissionsReport 의 areAllPermissionsGranted 는 모든 권한이 주어졌으면 true를 아니면 false를 리턴할 것이다.
onPermissionRationaleShouldBeShown 구현은
각자 마음대로 할 수 있지만
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
token.continuePermissionRequest();
}
요렇게 구현을 하면 그냥 다시 권한 요청을 할 수 있다.
listener 스레드
Dexter.withContext(context)
.withPermission(permission)
.withListener(listener)
.onSameThread()
.check();
깃허드 예제 코드에 보면 onSameThread() 를 호출한다.
이거는 같은 스레드에서 listener 콜백을 받고 싶으면 붙이면 된다.