AndroidでPermissionをリクエストするとき
ネットで探すと、未だにリクエストを開発者側でハンドリングする記事ばかり出てきます。
しかし公式ドキュメントでは、RequestPermissionやRequestMultiplePermissionsのコントラクトを使用した方がいいと書いてあります。
従来からある方法では、権限リクエストの一部として開発者自身がリクエスト コードを管理し、このリクエスト コードを権限コールバックのロジックに含めます。別の方法として、AndroidX ライブラリに含まれる RequestPermission コントラクトを使用して、システムに権限リクエスト コードの管理を許可することもできます。RequestPermission コントラクトを使用するとロジックが簡素化されるため、可能な場合は使用することをおすすめします。
使用例は以下の通り
Kotlin + Jetpack Composeでの複数権限のリクエストの場合となります。
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { granted ->
val notPermission = granted.filter {
!it.value
}.size
if (notPermission != 0) {
// 何かしらの権限が取得できなかった場合
} else {
// 正常に取得できた場合
}
}
@Composable
fun PermissionRequestButton() {
Button(onClick = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
requestPermissionLauncher.launch(
arrayOf(
ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION,
WRITE_EXTERNAL_STORAGE, FOREGROUND_SERVICE
)
)
}
}) {
Text(text = "Permission Request")
}
}
## 参考
https://developer.android.com/training/permissions/requesting?hl=ja
https://qiita.com/irgaly/items/f98acbadb83c799cb666