【Kotlin/Android Studio】Bluetoothのパーミッション周りの実装方法!

この記事からわかること
- Android StudioでBluetooth機能を利用する
- パーミッション(権限)周りの実装方法
- Android9(APIレベル28)で必要になる権限は?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Kotlin:1.9.0
公式リファレンスに乗っているBluetoothのパーミッション周りの実装方法を自分なりにまとめておきたいと思います。
Bluetooth機能実装に必要なパーミッション
Androidアプリからデバイスの機能などを利用する際にはパーミッションを宣言する必要があり、レベルがdangerous
のものはユーザーに対して許可申請ダイアログを表示し承諾を得る必要があります。
おすすめ記事:【Kotlin/Android Studio】パーミッション(権限)許可のリクエスト方法!requestPermissions

Bluetooth機能を利用する際も同様にいくつかパーミッションを宣言する必要があり、その中にはdangerous
レベルのものがあり許可申請ダイアログを表示させる必要があります。Bluetooth機能ではAndroid9(APIレベル28)を境目に必要になるパーミッションが異なります。
Android9(APIレベル28)以上
- android.permission.BLUETOOTH
- android.permission.BLUETOOTH_ADMIN
- android.permission.ACCESS_FINE_LOCATION
Android9(APIレベル28)以下
- android.permission.BLUETOOTH
- android.permission.BLUETOOTH_ADMIN
- android.permission.ACCESS_COARSE_LOCATION
基本的にBluetoothを利用するにはBluetooth自体の権限と位置情報の権限を宣言する必要があるようです。
機能によって必要になるパーミッション
さらにそこからBluetoothの機能であるスキャンや接続、アドバタイズなどを実装したい場合は以下のパーミッションを必要になるようです。
おすすめ記事:BLE(Bluetooth Low Energy)とは?セントラルやペリフェラルの意味と用語集
機能によって必要なもの
- android.permission.BLUETOOTH_ADVERTISE
- android.permission.BLUETOOTH_CONNECT
- android.permission.BLUETOOTH_SCAN
それぞれの権限の概要について先に見ておきます。
BLUETOOTH
アプリケーションがペアリングされた Bluetooth デバイスに接続できるようにします。
レベル:normal
BLUETOOTH_ADMIN
アプリケーションが Bluetooth デバイスを検出してペアリングできるようにします。
レベル:normal
ACCESS_FINE_LOCATION
アプリが正確な位置情報にアクセスできるようにします
レベル:dangerous
ACCESS_COARSE_LOCATION
公式リファレンス:ACCESS_COARSE_LOCATION
アプリがおおよその位置情報にアクセスできるようにします。
レベル:dangerous
BLUETOOTH_ADVERTISE
近くの Bluetooth デバイスにアドバタイズできるようにするために必要です。
レベル:dangerous
BLUETOOTH_CONNECT
ペアリングされた Bluetooth デバイスに接続できるようにするために必要です。
レベル:dangerous
BLUETOOTH_SCAN
近くの Bluetooth デバイスを検出してペアリングできるようにするために必要です。
レベル:dangerous
これらのパーミッションは「AndroidManifest.xml」に宣言します。
パーミッション申請ダイアログを実装する
パーミッション申請ダイアログを表示させるにはregisterForActivityResult
メソッドを使用して以下のように実装します。
Bluetoothをサポートしているデバイスかチェックする
パーミッションだけでなく使用している端末がそもそもBluetoothをサポートしているかどうかもチェックが必要です。サポートしているかを確認するにはBluetoothAdapter
型のisEnabled
から取得します。
管理するクラスを実装してみる
Bluetoothのパーミションとサポートの有無をチェックする実装を管理クラスに切り出してみました。Bluetooth機能が有効かどうかはBluetoothState
型で外部に公開し識別できるようにしています。GitHubで公開もしているので参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。