[Android] onRequestPermissionsResult deprecated

Janzizu·2022년 10월 4일
0
post-thumbnail

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))
        }
    }

0개의 댓글