我能够:1 . 在中央设备和外围设备之间 Build GAP连接2.通过写入特性将数据从中心发送到外围设备 .
现在,我想将一些数据发送回中央 . 如何才能做到这一点?外围设备现在是否会开始扮演一个中心角色?或者它只是通过发送一些数据从外围设备到中心的响应?
请指导我这个 .
我想你想要的是点对点蓝牙传输机制 . 我遵循了以下方法:
每个设备都侦听传入的连接请求 .
想要发送数据的设备,连接到其他设备并传输数据 .
这意味着设备有时必须同时处于中央和外围模式 .
如果它不能同时工作,那么你可能需要停止广告,如果你正在写数据 . 因为你通过ble写数据我想它必须非常小 . 这意味着你的设备不会只是短期广告时间 .
您可以使用混合方法,使用ble进行广告,但通过传统蓝牙传输数据 .
Alternative approach:
从外围设备,宣传中央将要写入的两个特征......一个特征(TYPE WRITE)和中央将要收听的另一个特征(TYPE NOTIFY) . 第二个特性仅用于从外设向中心发送确认 .
一旦中心写入特征,外围设备就可以通过更新“NOTIFY”特征来向中央确认 .
好!这是答案 . 我终于弄清楚外围设备如何将响应发送回中央:
CENTRAL
bluetoothGattCharacteristic.setValue(value.getBytes()); bluetoothGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE); mBluetoothLeService.mBluetoothGatt.writeCharacteristic(bluetoothGattCharacteristic);
PERIPHERAL
在外围方面,当中央写入特定特征时,会触发 onCharacteristicWriteRequest .要将响应从外围设备发送回中央,请在按钮单击时调用以下方法并调用 notifyCharacteristicChanged API以通知中心 .
onCharacteristicWriteRequest
notifyCharacteristicChanged
public void sendResponse(String data){ for (int i = 0; i < Config.arr.length; i++) { BluetoothGattCharacteristic gattCharacteristic = AService.getCharacteristic(UUID.fromString(CHAR_NOTIFY)); gattCharacteristic.setValue(data); boolean result = mGattServer.notifyCharacteristicChanged(Config.device, gattCharacteristic, true); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } }
在中心侧,然后触发 onCharacteristicChanged 回调并收到通知 .
onCharacteristicChanged
2 回答
我想你想要的是点对点蓝牙传输机制 . 我遵循了以下方法:
每个设备都侦听传入的连接请求 .
想要发送数据的设备,连接到其他设备并传输数据 .
这意味着设备有时必须同时处于中央和外围模式 .
如果它不能同时工作,那么你可能需要停止广告,如果你正在写数据 . 因为你通过ble写数据我想它必须非常小 . 这意味着你的设备不会只是短期广告时间 .
您可以使用混合方法,使用ble进行广告,但通过传统蓝牙传输数据 .
Alternative approach:
从外围设备,宣传中央将要写入的两个特征......一个特征(TYPE WRITE)和中央将要收听的另一个特征(TYPE NOTIFY) . 第二个特性仅用于从外设向中心发送确认 .
一旦中心写入特征,外围设备就可以通过更新“NOTIFY”特征来向中央确认 .
好!这是答案 . 我终于弄清楚外围设备如何将响应发送回中央:
CENTRAL
PERIPHERAL
在外围方面,当中央写入特定特征时,会触发
onCharacteristicWriteRequest
.要将响应从外围设备发送回中央,请在按钮单击时调用以下方法并调用
notifyCharacteristicChanged
API以通知中心 .在中心侧,然后触发
onCharacteristicChanged
回调并收到通知 .