android_通販で購入したBLE製品の値の取得について-memo

 


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

BLEのデバイスと接続させるタイプの

アプリについておたずねします。



iOSだと ユーザーのセキュリティに関する考え方が違うのか

androidのほうが BLEを扱う際の自由度が違うことを

最近知ったのですが、


通販で購入したBLEの製品の

serviceの名前や

characteristicの名前を

一覧表示したり、

その値を取得したりするようなことはできるのでしょうか?





AndroidでBLE(Bluetooth Low Energy)デバイスと接続し、

サービスやキャラクタリスティックの名前や値を取得することは可能です。

iOSに比べてAndroidのほうが、

BLEの操作に関して若干自由度が高い部分があります。


以下に、AndroidでのBLEデバイスのサービスと

キャラクタリスティックを取得する手順を概略で説明します。


### 1. 必要な権限の設定


AndroidManifest.xmlで必要な

BLE関連のパーミッションを追加します。


たとえば、以下のようにします。


```xml


<uses-permission android:name

="android.permission.BLUETOOTH" />


<uses-permission android:name

="android.permission.BLUETOOTH_ADMIN" />


<uses-permission android:name

="android.permission.BLUETOOTH_SCAN" />


<uses-permission android:name

="android.permission.BLUETOOTH_CONNECT" />


<uses-permission android:name

="android.permission.ACCESS_FINE_LOCATION" />


```


### 2. BLEデバイスのスキャンと接続

BLEデバイスを見つけるために、

`BluetoothLeScanner`でスキャンを開始します。

スキャンして見つかったデバイスに接続する際には、

`BluetoothGatt`クラスを使用して接続を確立します。


```kotlin

val bluetoothGatt = device.connectGatt(context, false, gattCallback)

```


### 3. GATTサービスとキャラクタリスティックの取得


接続が成功すると、

`BluetoothGattCallback`の`onServicesDiscovered`メソッドが呼び出されます。

このメソッド内で、サービスやキャラクタリスティックのリストを取得できます。


```kotlin


override fun onServicesDiscovered(gatt: 

BluetoothGatt, status: Int) {


    if (status == BluetoothGatt.GATT_SUCCESS) {

        val services = gatt.services

        for (service in services) {

            Log.d("BLE", "Service UUID: ${service.uuid}")

            for (characteristic in service.characteristics) {

                Log.d("BLE", "Characteristic UUID: ${characteristic.uuid}")

            }

        }

    }

}


```


### 4. キャラクタリスティックの読み取り


特定のキャラクタリスティックの値を取得するには、

`readCharacteristic`メソッドを使用します。


このメソッドは非同期で呼び出され、

結果は`onCharacteristicRead`コールバックで受け取ります。



```kotlin


fun readCharacteristic(characteristic: BluetoothGattCharacteristic) {

    bluetoothGatt?.readCharacteristic(characteristic)

}


override fun onCharacteristicRead(gatt: 

BluetoothGatt, characteristic: BluetoothGattCharacteristic, status: Int) {

    if (status == BluetoothGatt.GATT_SUCCESS) {

        val value = characteristic.value

        Log.d("BLE", "Read value: ${value.toHexString()}")

    }

}


```


### 5. ユーザーインターフェースでの表示


サービスやキャラクタリスティックの名前や値を取得したら、

それらをアプリ内のUIに表示するために

リスト表示やテキストビューを活用することができます。



これで、AndroidアプリでBLEデバイスのサービス一覧や

キャラクタリスティックの名前・値を取得して表示する仕組みが構築できます。


コメント