如何从自定义BLE服务(例如智能手表)中读取数据

时间:2018-02-21 04:43:09

标签: android ios bluetooth bluetooth-lowenergy

我有一个BLE设备(智能手表),其中我想从服务中读取所有数据并在我的应用程序中使用(Swift和Android),我如何从自定义服务访问数据,但我无法在中查看UUID关贸总协定的服务和特点

1 个答案:

答案 0 :(得分:1)

您可以使用此代码读取数据。它为我工作。 当您连接Smartwatch时,您需要发送服务发现请求。所以,下面的回调方法被触发了。在这种方法中获得您的服务和特征。

 @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();
            }
        }

byte [] data = characteristic.getValue(); 返回您想要从设备中读取的数据。