2 回答
TA贡献1810条经验 获得超4个赞
您的代码中缺少的一件事是设置通知,以便 Central 可以收听 Peripheral 的响应。尝试这样的事情:
public void setNotifications() {
BluetoothGattService service = bluetoothGatt.getService(SERVICE_UUID);
BluetoothGattCharacteristic characteristic = service.getCharacteristic(CHARACTERISTIC_UUID);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(DESCRIPTOR_UUID);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
characteristic.addDescriptor(descriptor);
characteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
bluetoothGatt.writeDescriptor(descriptor);
bluetoothGatt.setCharacteristicNotification(characteristic, true);
}
之后,您可以向设备发送命令并听到它返回。
public void returnData(String data) {
BluetoothGattService service = bluetoothGatt.getService(SERVICE_UUID);
BluetoothGattCharacteristic characteristic = service.getCharacteristic(CHARACTERISTIC_UUID);
String dataString = data;
dataString.getBytes();
writeCharacteristic.setValue(dataString);
writeCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
bluetoothGatt.writeCharacteristic(writeCharacteristic);
}
TA贡献1836条经验 获得超3个赞
首先,阅读蓝牙概述。查看项目是否添加了蓝牙权限。
这里的一个错误是isConnected=true
设置得太早了,因为你可以认为你是在发现 ble 服务之后连接的(status == BluetoothGatt.GATT_SUCCESS)
。否则无法读写特性。
一个很好的起点可以是这个来自谷歌的回购协议。这是一个旧项目,我不确定您是否必须更新一些依赖项才能使其编译,但这并不重要。
建立连接并开始读取字节很容易,但是如果你想与 ble 设备建立可靠的连接,由于 android 碎片化和制造商不遵循蓝牙规范,这可能非常困难,几乎不可能使蓝牙低适用于所有设备的能量。
一旦你开始阅读一些字节,我建议你通过这个视频学习一些重要的技巧。如果你想更深入,请仔细阅读这个关于 ble 的精彩资源。
一旦你开始对 ble 感到绝望,可能是阅读这个已知问题列表的好时机
最后,您会发现在 android 中使用 ble low energy 可以做的最好的事情是使用开源库,例如 Nordic semiconductor ble 库或RxAndroid Ble。
但在使用 ble 库之前,最好先了解该库在做什么并了解您为什么需要它。
编辑:我从未使用过 appcelerator,但这里有一个用于 appcelerator titanium 的蓝牙模块。
TA贡献1780条经验 获得超3个赞
您的客户端特征配置描述符的 uuid 有误。它应该是 00002902-0000-1000-8000-00805f9b34fb 但你写了 6E400002-B5A3-F393-E0A9-E50E24DCCA9E。
添加回答
举报