android_AppCompatActivity_requestPermissionsメソッドの動作

 

androidアプリの作成について学習しているのですが、


AppCompatActivityのサブクラスを作成して


そこに


       

private fun requestPermissions() {


val permissions

= if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

        

    arrayOf(

            

        Manifest.permission.BLUETOOTH_SCAN,

        Manifest.permission.BLUETOOTH_CONNECT,

        Manifest.permission.ACCESS_FINE_LOCATION

                

    )

            

} else {

        

        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)

            

}

        

ActivityCompat.requestPermissions(

    this, permissions, REQUEST_ENABLE_BT )

        

}


 のようなメソッドを追加して実行した場合ですが、

 

 iOSでのSheetのようなものが表示されて、

 そのアプリがbluetoothを使用してもいいかどうかの

 

 ユーザーに意思を確認する、という流れになるのでしょうか?



はい、Androidアプリでそのようなコードを実行すると、

iOSの「Sheet」に似たユーザーインターフェースが表示され、

アプリが必要とする権限についてユーザーに確認します。


この流れはAndroidの権限システムに基づいています。



### 流れの詳細


1. **権限リクエストのコードの実行**:


   メソッド `requestPermissions()` が実行されると、

   `ActivityCompat.requestPermissions()` によって

   ユーザーに必要な権限を求めるシステムダイアログが表示されます。



2. **ユーザーインターフェースの表示**:


   - ユーザーには権限リクエストに関するダイアログが表示されます。

   

   - 例: 「このアプリが Bluetooth をスキャンできるようにしますか?」など。


3. **ユーザーの応答**:


   - ユーザーが「許可」または「拒否」を選択します。

   

   - 選択の結果は `ActivityCompat.requestPermissions` の後に

   `onRequestPermissionsResult` コールバックメソッドで取得できます。




### iOSの「Sheet」との違い


iOSでは「Sheet」や「Alert」と呼ばれる標準ダイアログが表示されますが、

Androidの場合もシステムUIを通じて同様の形式で権限確認が行われます。


ただし、デザインや文言がiOSと異なる場合があります。



以下がポイントです:



- **Android**:


  - ダイアログデザインはAndroid OSのバージョンやテーマに依存します。

  

  - 権限が拒否された場合でも、後から設定画面で変更可能です。


- **iOS**:


  - 権限リクエストが1回きりで、

拒否された場合は後からシステム設定アプリで変更が必要です。



### Androidでの権限リクエストに関する注意


- **Bluetooth権限**:


  - Android 12 (API 31) 以上では、

  `BLUETOOTH_SCAN` や `BLUETOOTH_CONNECT` 権限が必要です。

  それ以前のバージョンでは不要です。



  - アプリが権限を持たない状態でBluetooth操作を試みると

  エラーや例外が発生します。

  


- **位置情報権限**:


  - 一部のBluetooth操作では位置情報も必要になるため、

  `ACCESS_FINE_LOCATION` を求める必要があります。


### 権限リクエストの結果を処理する方法


ユーザーが権限を許可または拒否した結果を取得するには、

次のように `onRequestPermissionsResult` をオーバーライドします:


```kotlin


override fun onRequestPermissionsResult(


    requestCode: Int, permissions: Array<String>, 

grantResults: IntArray

) {


    super.onRequestPermissionsResult(

requestCode, permissions, grantResults)

    

    if (requestCode == REQUEST_ENABLE_BT) {

        if (grantResults.isNotEmpty() 

&& grantResults.all { 

it == PackageManager.PERMISSION_GRANTED }) {

            // すべての権限が許可された場合

            Log.d("Permissions", "Bluetooth permissions granted")

        } else {

            // 権限が拒否された場合

            Log.d("Permissions", "Bluetooth permissions denied")

        }

    }

}


```


このように実装することで、

権限が正しく付与されたかどうかを判断し、

次の処理に進むことができます。



コメント