9
7

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: ActivityResultContracts.RequestPermission でパーミッションを要求する

Posted at

ActivityResultContract の仕組みを使って、パーミッションを要求することができます。

前提

AndroidX や AndroidX Fragment が導入されている前提です。

実装

RequestPermission を使います。

class MyFragment: Fragment() {
    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { granted ->
        if (granted) {
            // 権限を取得できた
        } else {
            // 権限を取得できなかった
        }
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val binding = /* ... */
        binding.button.setOnClickListener {
            requestPermissionLauncher.launch(WRITE_EXTERNAL_STORAGE)
        }
    }
// ...

解説

launch() の引数にパーミッションの種類を渡し、registerForActivityResult の callback でパーミッション取得結果を受け取ります。

複数のパーミッションを要求する

RequestMultiplePermissions で複数のパーミッションを要求できます。

実装

class MyFragment: Fragment() {
    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()
    ) { granted ->
        // granted: Map<String, Boolean>
        if (granted[WRITE_EXTERNAL_STORAGE]) {
            // WRITE_EXTERNAL_STORAGE の権限を取得できた
        }
        if (granted[ACCESS_FINE_LOCATION]) {
            // ACCESS_FINE_LOCATION の権限を取得できた
        }
    }
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        val binding = /* ... */
        binding.button.setOnClickListener {
            requestPermissionLauncher.launch(
                arrayOf(WRITE_EXTERNAL_STORAGE, ACCESS_FINE_LOCATION)
            )
        }
    }
// ...

解説

launch() の引数にパーミッションの配列を渡し、registerForActivityResult の callback でパーミッション取得結果を受け取ります。パーミッション取得結果は Map<String, Boolean> 形式で、それぞれのパーミッションをキーとして結果が保持されています。

9
7
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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?