Я занимаюсь проектированием центральных и периферийных приложений на двух разных телефонах Android.Я сделал следующее, чтобы добавить службу информации об устройстве и ее характеристики
val DEVICE_INFO_SERVICE_UUID = "0000180a-0000-1000-8000-00805f9b34fb"
val MANUFACTURER_UUID = "00002a29-0000-1000-8000-00805f9b34fb"
val HARDWARE_UUID = "00002a27-0000-1000-8000-00805f9b34fb"
val FIRMWARE_UUID = "00002a26-0000-1000-8000-00805f9b34fb"
val deviceInfoService = BluetoothGattService(UUID.fromString(DEVICE_INFO_SERVICE_UUID), BluetoothGattService.SERVICE_TYPE_PRIMARY)
val manufactureChar = BluetoothGattCharacteristic(UUID.fromString(MANUFACTURER_UUID), BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_READ)
val hardwareChar = BluetoothGattCharacteristic(UUID.fromString(HARDWARE_UUID), BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_READ)
val firmwareChar = BluetoothGattCharacteristic(UUID.fromString(FIRMWARE_UUID), BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_READ)
manufactureChar.setValue("Avantari Technologies Pvt ltd.")
hardwareChar.setValue("v2.1.0")
firmwareChar.setValue("v2.1.1")
deviceInfoService.addCharacteristic(manufactureChar)
deviceInfoService.addCharacteristic(hardwareChar)
deviceInfoService.addCharacteristic(firmwareChar)
mGattServer!!.addService(deviceInfoService)
, и с периферийного устройства я делаю следующее, чтобы прочитать его.
override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
super.onServicesDiscovered(gatt, status)
if (status == BluetoothGatt.GATT_SUCCESS) {
val leServiceList: List<BluetoothGattService> = gatt.services
for (mBluetoothGattService in leServiceList) {
if (mBluetoothGattService.uuid.toString().equals(DEVICE_INFO_SERVICE_UUID, ignoreCase = true)) {
for (mBluetoothGattCharacteristic in mBluetoothGattService.characteristics) {
when {
mBluetoothGattCharacteristic.uuid.toString().equals(HARDWARE_UUID, ignoreCase = true) ->
Log.d(TAG, "Hardware Version : ${mBluetoothGattCharacteristic.value}")
mBluetoothGattCharacteristic.uuid.toString().equals(FIRMWARE_UUID, ignoreCase = true) ->
Log.d(TAG, "Firmware Version : ${mBluetoothGattCharacteristic.value}")
mBluetoothGattCharacteristic.uuid.toString().equals(MANUFACTURER_UUID, ignoreCase = true) ->
Log.d(TAG, "Manufacturer Name : ${mBluetoothGattCharacteristic.value}")
}
}
}
}
}
}
, но здесь на периферийном устройстве я получаю нользначения после того, как услуги были обнаружены.