Android6以降の権限リクエストの書き方

最近Androidで権限リクエストに関するコードをkotlinで書いたので記載

色々書き方があるみたいだが、最近はランチャーを使った権限の取得の仕方をするみたい この方法だと、onRequestPermissionResultハンドラーなどを使わないため デベロッパーがリクエストコードを管理しなくてもいいらしい

まず許可・拒否の結果を受けとるコールバックをランチャーに登録する

1
2
3
4
5
6
7
8
9
val requestPermissionLauncher =
    registerForActivityResult(RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
			// 許可時の処理
        } else {
            // 拒否時の処理
        }
    }

権限を確認したい場所に

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
when {
    ContextCompat.checkSelfPermission(
            CONTEXT,
            Manifest.permission.REQUESTED_PERMISSION
            ) == PackageManager.PERMISSION_GRANTED -> {
		// 許可された場合に実行
    }

    ActivityCompat.shouldShowRequestPermissionRationale(
            this, Manifest.permission.REQUESTED_PERMISSION) -> {
		// 説明UIを表示する必要がある場合に表示する
		// なぜ権限が必要なのかを表示するダイアログなどを出し
		// OKを押した場合は権限のリクエスト、キャンセルの場合は
		// 何もせず継続させるUI等を表示させる
		showInContextUI()
    }

    else -> {
		// 権限のリクエスト
        requestPermissionLauncher.launch(
                Manifest.permission.REQUESTED_PERMISSION)
    }
}