如何从自定义 BLE 服务读取数据(例如智能手表)
Posted
技术标签:
【中文标题】如何从自定义 BLE 服务读取数据(例如智能手表)【英文标题】:How to read data from custom BLE service(e.g smartwatch) 【发布时间】:2018-02-21 04:43:09 【问题描述】:我有一个 BLE 设备(智能手表),我想从服务中读取所有数据并在我的应用程序(Swift 和 android)中使用,我如何访问自定义服务中的数据,但我看不到 UUID GATT 服务和特点
【问题讨论】:
首先尝试使用一些 BLE 调试应用程序,如 nRF Connect 来查看是否存在特征。如果可行,只需按照在线教程学习如何在 Android 上使用 BLE。 【参考方案1】:您可以使用此代码读取数据。这对我有用。 当您连接智能手表时,您需要发送服务发现请求。因此,触发了以下回调方法。在此方法中获取您的服务和特征。
@Override
public void onServicesDiscovered(final BluetoothGatt gatt, final int status)
Log.e(TAG, "onServicesDiscovered: ");
if (status != BluetoothGatt.GATT_SUCCESS)
Log.w(TAG, "onServicesDiscovered received: " + status);
return;
BluetoothGattService customService = gatt.getService(CUSTOM_SERVICE_UUID);
if (customService != null)
customNotifyCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_NOTIFY_UUID);
customWriteCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_WRITE_UUID);
customReadCharacteristic = customService.getCharacteristic(CUSTOM_CHARACTERISTICS_READ_UUID);
在获得所有特征和服务后,发送如下读取请求。 将下面的行放在您需要读取数据的位置。
readCharacteristic(customReadCharacteristic);
下面解释 readCharacteristic 方法。
public void readCharacteristic(BluetoothGattCharacteristic characteristic)
if (mBluetoothAdapter == null || mBluetoothGatt == null)
Log.w(TAG, "BluetoothAdapter not initialized");
return;
mBluetoothGatt.readCharacteristic(characteristic);
所以,触发了 onCharacteristicRead 回调。
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic,
int status)
if (status == BluetoothGatt.GATT_SUCCESS)
byte[] data = characteristic.getValue();
字节[] 数据 = 特征.getValue(); 返回您要从设备中读取的数据。
【讨论】:
以上是关于如何从自定义 BLE 服务读取数据(例如智能手表)的主要内容,如果未能解决你的问题,请参考以下文章