onRequestPermissionsResult를 사용하였으나 deprecated 되었다는 문구가 떴다.
일반적으로 requestPermissions() 메서드에 전달하여 권한을 요청하는 동안 요청 코드를 관리하고,
onRequestPermissionsResult() 메서드에서 요청 코드를 확인했었다.
하지만 사진에서와 같이 이 메서드는 deprecated되었다.
onRequestPermissionsResult 대신에 registerForActivityResult() 메서드를 사용하여 처리하면 된다.
단일 권한
private val permissionList = Manifest.permission.ACCESS_FINE_LOCATION
private val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission()) {
when(it) {
true -> { Toast.makeText(this,"권한 허가",Toast.LENGTH_SHORT).show()}
false -> {
Toast.makeText(this,"권한 거부",Toast.LENGTH_SHORT).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val request_btn = findViewById<Button>(R.id.request_permission_btn)
request_btn.setOnClickListener {
requestPermission.launch(permissionList)
}
}
버튼을 클릭하면 launch를 통해 시스템 권한 대화 상자를 표시할 수 있다.
launch() 가 호출되면 대화상자가 나타난다.
복수 권한
절차는 동일하다. 다만 launch() 에 권한 배열을 전달하면 된다.
private val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) {
for(entry in it.entries) {
Toast.makeText(
this,
"${entry.key} = ${entry.value}",
Toast.LENGTH_SHORT
).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val request_btn = findViewById<Button>(R.id.request_permission_btn)
request_btn.setOnClickListener {
requestPermission.launch(arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION))
}
}