我正在尝试实现与BLE findme设备通信的应用程序。我有这些设备之一,但有一些问题。使用iPhone我已经使用bleTools应用程序测试了这个设备,这个应用程序正常工作,即我已经设法读取所有设备的特征并发送特征使设备发出蜂鸣声。但是使用Android(Nexus 5)我只能读取设备的特性,但不能让设备发出蜂鸣声。 我的代码是:
private static final UUID IMMEDIATE_ALERT_SERVICE =
UUID.fromString("00001802-0000-1000-8000-00805f9b34fb");
private static final UUID IMMEDIATE_ALERT_LEVEL =
UUID.fromString("00002a06-0000-1000-8000-00805f9b34fb");
...
public void beep(DeviceData device) {
BluetoothGatt gatt = mConnectedDevices.get(device.getDeviceAddress());
BluetoothGattService bluetoothGattService = gatt.getService(IMMEDIATE_ALERT_SERVICE);
if (bluetoothGattService == null) {
return;
}
BluetoothGattCharacteristic characteristic =
bluetoothGattService.getCharacteristic(IMMEDIATE_ALERT_LEVEL);
if (characteristic == null) {
return;
}
byte[] arrayOfByte = new byte[1];
arrayOfByte[0] = (byte) 0x01;
characteristic.setValue(arrayOfByte);
gatt.writeCharacteristic(characteristic);
}
回调方法返回Ok:
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (characteristic.getUuid().toString().equals(IMMEDIATE_ALERT_LEVEL.toString())) {
//TODO: use device address to identify the device-receiver
Message msg = new Message();
msg.what = MSG_PARAM_WRITTEN;
msg.obj = (status == BluetoothGatt.GATT_SUCCESS);
mHandler.sendMessage(msg);
}
}
但设备方没有任何反应。
任何人都可以向我解释我做错了什么或者可能会给我一些建议我应该做什么?
同样,我可以读取设备特性,但不能将它们写入设备。
答案 0 :(得分:0)
与iOS不同,Android在蓝牙方面有很多未记载的技巧。我假设您使用的是Android 4.3及更高版本中包含的标准蓝牙库。如果您使用三星或Broadcom等其他库,结果可能会有所不同。
因为我没有findeme设备,所以无法确认。但是我已经在Android上使用了经典和低能量蓝牙能量一段时间了。我的建议是完成扫描,发现服务和读/写特征的完整过程。
还有一个关于Android BLE的重要事项。写入必须是顺序的。我的意思是,如果你写了一个特征,你必须等待onCharacteristic事件才能开始,然后再编写另一个事件。 Android开发者网站上未记录此信息。实现此功能的最佳方法是使用LinkedList作为工作队列。
祝你好运,如果你有疑问,请告诉我。