Android 6.0 Marshmallow로 업데이트한 후에는 권한 체크를 AndroidManifest.xml 뿐만 아니라 런타임에 권한을 요청해야 한다.
위험한 권한(카메라, 주소록, 전화번호 등) 을 사용하는 경우 런타임에 확인하고 요청해야 한다.
권한 요청, 관리를 위해 checkSelfPermission(), requestPermissions(), onRequestPermissionsResult(), onActivityResult() 를 이용해 구현할 수 있지만 매우 복잡하고 어렵다.
--> TedPermission 라이브러리를 사용하면 간단하게 구현 가능
https://github.com/ParkSangGwon/TedPermission
// Permission 요청, 관리를 위한 라이브러리
implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
<!--네트워크로만 위치 측정-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--GPS 센서를 사용하여 위치 측정-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
class GoogleMapsActivity : AppCompatActivity(), PermissionListener {
// 맵 위치 권한 설정을 확인
if (Build.VERSION.SDK_INT >= 23) {
TedPermission.create()
.setPermissionListener(this)
.setRationaleMessage("위치 정보 제공이 필요한 서비스입니다.")
.setDeniedMessage("[설정] -> [권한]에서 권한 변경이 가능합니다.")
.setDeniedCloseButtonText("닫기")
.setGotoSettingButtonText("설정")
.setRationaleTitle("HELLO")
.setPermissions(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
)
.check()
}
/** PERMISSION CHECK **/
override fun onPermissionGranted() {
Util.Toast(mContext,"위치 정보 제공이 완료되었습니다.")
}
override fun onPermissionDenied(deniedPermissions: MutableList<String>?) {
Util.Toast(mContext,"위치 정보 제공이 거부되었습니다.")
}
}
setPermissions 안에 요청할 권한들을 넣어준다
setDeniedMessage 는 권한이 없을 때 뜨는 다이얼로그 셋팅
onPermissionGranted() : 이미 권한이 있거나 사용자가 권한을 허용했을 때 호출
onPermissionDenied() : 요청이 거부 되었을 때 호출
출처 : https://developer.android.com/training/permissions/requesting.html?hl=ko
https://developer.android.com/reference/kotlin/android/Manifest.permission#summary
https://hanyeop.tistory.com/139
글 잘보고 가요 ㅋㅋㅋ