2021.06.25 - [Android/기본] - [Android] 안드로이드 권한 (Permission) 체크하기 - 위치정보 사용하기
안드로이드에서 Permission을 요청, 관리하기 위해서는
checkSelfPermission()을 통해 권한을 체크하고
requestPermissions()을 통해 요청 후 onRequestPermissionsResult()로 전달받아야 한다.
또한 Permission을 위해 별도의 다이얼로그 화면도 구성해주어야 한다.
이 과정은 매우 복잡하다.
TedPermission 라이브러리를 사용하면 위 과정을 쉽게 처리할 수 있다.
1️⃣ 사용하기
https://github.com/ParkSangGwon/TedPermission
라이브러리 깃허브에서
bulid.gradle
dependencies {
// TedPermission
implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
}
최신 버전을 체크하여 bulid.gradle에 추가해준다.
manifest
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_CALENDAR"/>
이제 사용할 권한을 선언해준다. 임의로 위치 권한과 캘린더 권한을 요청하려고 한다.
권한 요청하기
setPermissions안에 요청할 권한들을 작성한다.
setDeniedMessage에 작성된 메세지는 권한이 없을 때 다이얼로그로 나타난다.
PermissionListener내의
onPermissionGranted는 이미 권한이 있거나, 권한 요청이 허가되었을 때 호출되며
onPermissionDenied는 권한이 거부되었을 때 호출된다.
또한 권한 요청 함수를 람다로 작성하여
권한이 있을 때 동작할 로직 함수를 받아와 호출해준다.
버튼 클릭 시 권한을 요청하여 이미 권한이 있거나 요청이 허가되면 todo 함수를 호출하도록 한다.
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btnPermission.setOnClickListener {
requestPermission {
todo()
}
}
}
private fun todo(){
// TODO : 기능 구현
Toast.makeText(this, "완료", Toast.LENGTH_SHORT).show()
}
private fun requestPermission(logic : () -> Unit){
TedPermission.create()
.setPermissionListener(object : PermissionListener {
override fun onPermissionGranted() {
logic()
}
override fun onPermissionDenied(deniedPermissions: List<String>) {
Toast.makeText(this@MainActivity,
"권한을 허가해주세요.",
Toast.LENGTH_SHORT)
.show()
}
})
.setDeniedMessage("권한을 허용해주세요. [설정] > [앱 및 알림] > [고급] > [앱 권한]")
.setPermissions(Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_CALENDAR )
.check()
}
}
이제 버튼 클릭 시 자동으로 권한을 체크하여 권한이 없을 경우 권한을 요청한다.
권한이 없을 경우 다이얼로그로 알려준다.
권한이 있으면 이제 버튼 클릭 시 todo 함수에 구현한 기능이 잘 작동하는 것을 확인할 수 있다.
전체 코드
https://github.com/HanYeop/AndroidStudio-Practice2/tree/master/PermissionEx
참고
https://github.com/ParkSangGwon/TedPermission