#【Android】備忘録: 権限リクエストの方法
概要
完全な自分用の備忘録です。
毎回、パーミションのリクエストの仕方を忘れるので、その記録です。
手順
- manifestに、権限の宣言を追加する。
- 実行時に、permissionの状態を確認する
- 許可されていなければ、リクエストを行う
- リクエストの結果で処理を実行
1. manifestに、権限の宣言を追加する。
-
AndroidManifest.xmlに、権限についての宣言を行う。
- 例: カメラを使いたい時
-
<users-permission android:name="~"/>
を追加
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.sample">
// この部分が必要
<uses-permission android:name="android.permission.CAMERA" />
<application
~~~省略~~~ >
</aplication>
</manifest>
2. 実行時に、permissionの状態を確認する
-
例えば、buttonをタップした時に、permissionの確認をする場合
- 例: cameraButtonをタップした時に、確認
-
注意するところ
- Manifestが、java.util.Manifestをimportしないこと。android.Manifestをimportする。
~Activity.kt
val cameraButton = binding.camera
cameraButton.setOnClickListener {
// この部分が必要
// checkSelfPermissionで、Permissionの状態を確認する
// != PackageManager.PERMISSION_GRANTEDなので、許可されていないという条件分岐
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// この部分は、「3. 許可されていなければ、リクエストを行う」で追加
} else {
// 許可されていれば、カメラ起動
startActivity(Intent.(MediaStore.ACTION_IMAGE_CAPTURE))
}
}
3. 許可されていなければ、リクエストを行う
- 2.で書いたコードに、リクエストの処理を追加
~Activity.kt
cameraButton.setOnClickListener {
// != PackageManager.PERMISSION_GRANTEDなので、許可されていないという条件分岐
if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
// この部分が、追加
// 最後のREQUEST_CAMERA_PERMISSIONは、任意の定数
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.CAMERA), REQUEST_CAMERA_PERMISSION)
} else {
// 許可されていれば、カメラ起動
startActivity(Intent.(MediaStore.ACTION_IMAGE_CAPTURE))
}
}
4. リクエストの結果で処理を実行
- permissionのリクエストの結果は、onRequestPermissionsResultで受け取る
~Activity.kt
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if (requestCode == REQUEST_CAMERA_PERMISSION) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// カメラ起動
startActivity(Intent.(MediaStore.ACTION_IMAGE_CAPTURE))
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}