従来の権限リクエスト
Androidでカメラなどの権限リクエストは以下の形式になっていた。
- Fragment#requestPermissions() を呼び出すとダイアログを表示
 - 許可・不許可をユーザーが選択する
 - Framgment#onRequestPermissionsResult() がコールバックで呼ばれる
 
コードでは以下のように実装する。
class FooFragment: Fragment() {
    companion object {
        private const val REQUEST_CAMERA_PERMISSION = 1
    }
    override fun onViewCreated(...) {
        // ...
        // ① パーミッションをリクエスト→ダイアログが出る
        requestPermissions(arrayOf(android.Manifest.permission.CAMERA), REQUEST_CAMERA_PERMISSION)
        // ...
    }
    // コールバック
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        // ② パーミッションリクエストが成功した時、しなかったときの処理
    }
}
上記コードでは①のrequestPermissionsの呼び出しで以下のdeprecated warningが発生する。
'requestPermissions(Array<(out) String!>, Int): Unit' is deprecated. Deprecated in Java

修正方法
requestPermissionsによるパーミッションリクエストの仕組みはregisterForActivityResult()で代替された。
registerForActivityResult()を使った実装は以下のようになる。
まずregisterForActivityResult()メソッドでActivityResultLauncherを作成しフィールドに格納する
class FooFragment: Fragment() {
    private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
        // TODO
    }
}
作成したActivityResultLauncherのlaunch()メソッドを任意のタイミングで呼び出す。
(例として以下ではonViewCreatedで呼び出している。)
class FooFragment: Fragment() {
    private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
        // TODO
    }
    override fun onViewCreated(...) {
        // ...
        // ① パーミッションをリクエスト→ダイアログが出る
        permissionRequest.launch(android.Manifest.permission.CAMERA)
        // ...
    }
}
permissionRequest.launch()を実行するとダイアログが表示される。
ユーザーが許可・不許可を選択するとregisterForActivityResultの第2引数で指定したコールバックが呼ばれる。
class FooFragment: Fragment() {
    private val permissionRequest = registerForActivityResult(ActivityResultContracts.RequestPermission()) { result ->
        // ② パーミッションリクエストが成功した時、しなかったときの処理
    }
    override fun onViewCreated(...) {
        // ...
        // ① パーミッションをリクエスト→ダイアログが出る
        permissionRequest.launch(android.Manifest.permission.CAMERA)
        // ...
    }
}
以上でrequestPermissionsのdeprecated warningを解消できる。

\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/
