2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】備忘録: 権限リクエストのやり方

Last updated at Posted at 2020-12-12

#【Android】備忘録: 権限リクエストの方法

概要

完全な自分用の備忘録です。
毎回、パーミションのリクエストの仕方を忘れるので、その記録です。

手順

  1. manifestに、権限の宣言を追加する。
  2. 実行時に、permissionの状態を確認する
  3. 許可されていなければ、リクエストを行う
  4. リクエストの結果で処理を実行

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)
}

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?