🎉
[Android][Kotlin]パーミッション取得のサンプルコードを作ってみた。
いつもいつも、権限まわりで検索して調べてって、すごい時間をとられてしまうので、いい加減サンプルコードを作ってみた。
Abstract
- Androidのパーミッション取得のサンプルコード
- 簡単な説明
説明
onCreate()で、権限チェック関数(自作)を呼ぶ。
override fun onCreate(savedInstanceState: Bundle?) {
...
/* 権限(s)チェック */
val checkOK = checkPermissions() /* ←自前の関数 */
if(checkOK) {
/* ★★★ここに権限チェックOK後の処理 */
Toast.makeText(this, "権限OK", Toast.LENGTH_SHORT).show()
}
}
権限を持たなければ、ActivityResultLauncher.launch()。
必要に応じて下記コードの権限を変更する。
val permissions = arrayOf(Manifest.permission.POST_NOTIFICATIONS,
private fun checkPermissions(): Boolean {
/* 複数の権限チェック */
val permissions = arrayOf(Manifest.permission.POST_NOTIFICATIONS, /*複数時はここに並べる*/)
/* 未許可権限を取得 */
val deniedPermissions: MutableList<String> = ArrayList()
for (permission in permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED)
deniedPermissions.add(permission)
}
/* 未許可権限チェック */
if(deniedPermissions.isEmpty())
return true /* 権限付与済 何もする必要ない */
val fstLaunch = sharedPref.getBoolean(PREFKEY_FIRST_LAUNCH, true)
if(fstLaunch) {
/* 未許可権限があれば許可要求 */
permissionLauncher.launch(deniedPermissions.toTypedArray())
sharedPref.edit(commit=true) { putBoolean(PREFKEY_FIRST_LAUNCH, false)}
}
else {
val rationaleNeeded = deniedPermissions.any { permission ->
ActivityCompat.shouldShowRequestPermissionRationale(this, permission)
}
if(rationaleNeeded) {
/* 以前に拒否った */
permissionLauncher.launch(deniedPermissions.toTypedArray())
}
else {
/* 以前に"非表示にした"ならアラートダイアログ → Shutdown */
PermissionDialogFragment.show(this, R.string.wording_permission_2times)
}
}
return false
}
ActivityResultLauncherの実装
private val permissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
isGranted: Map<String, Boolean> ->
/* 権限チェック */
if (isGranted.all({it.value == true})) {
/* ★★★ここに権限チェックOK後の処理 */
Toast.makeText(this, "権限OK", Toast.LENGTH_SHORT).show()
return@registerForActivityResult /* 全て許可済 問題なし */
}
else {
/* ひとつでも権限不足ありならアラートダイアログ→Shutdown */
PermissionDialogFragment.show(this, R.string.wording_permission)
}
}
あと strings.xmlの実装
<resources>
<string name="app_name">PermissionSample</string>
<string name="req_permission">権限要求</string>
<string name="wording_permission">\nこのアプリにはこの権限が必要なんです。あなたの許可をください。\nアプリ終了します。</string>
<string name="wording_permission_2times">\nアプリ終了します。\n今このアプリは\"表示しない\"設定になっていまして。\nアンインストール → 再インストールして下さい。</string>
</resources>
これで権限取得はあらかた大丈夫なはず。
※25.08.31 Windowleakedが発生していたので、修正。
Discussion