我目前正在开发 Android 4.3 低功耗蓝牙,我能够连接到设备、获取服务、读/写服务。现在,当我尝试连接到第二台设备时,会收到第二台设备的服务,而第一台设备的服务会丢失。现在,当我尝试连接到第一个设备的写入/读取特性时,没有任何效果。
有没有人尝试连接到多个设备。你如何为两个设备初始化 Gatt?
我目前正在开发 Android 4.3 低功耗蓝牙,我能够连接到设备、获取服务、读/写服务。现在,当我尝试连接到第二台设备时,会收到第二台设备的服务,而第一台设备的服务会丢失。现在,当我尝试连接到第一个设备的写入/读取特性时,没有任何效果。
有没有人尝试连接到多个设备。你如何为两个设备初始化 Gatt?
我在三星 BLE 堆栈(galaxy S4)上的行为完全相同。我破解了三星代码并修复了它:
BluetoothGatt 类保留了“所有”已发现服务的列表。调用 BluetoothGatt->discoverServices 将清除此列表。我驾驶自己的课程并修改了函数的行为,只删除了相关蓝牙设备的服务。这是我的代码:
public class MyBluetoothGatt extends BluetoothGatt {
MyBluetoothGatt(Context paramContext, BluetoothProfile.ServiceListener paramServiceListener)
{
super(paramContext, paramServiceListener);
}
public final boolean discoverServices(BluetoothDevice paramBluetoothDevice)
{
if (paramBluetoothDevice == null)
{
Log.e("BtGatt.BluetoothGatt", "discoverServices() - device is null ");
return false;
}
Log.d("BtGatt.BluetoothGatt", "discoverServices() - device: " + paramBluetoothDevice.getAddress());
if ((d == null) || (this.f == 0))
return false;
// old code this.h.clear();
//--new code
@SuppressWarnings("rawtypes")
Iterator localIterator = this.h.iterator();
while (localIterator.hasNext())
{
BluetoothGattService localBluetoothGattService;
localBluetoothGattService = (BluetoothGattService)localIterator.next();
if (localBluetoothGattService.a().equals(paramBluetoothDevice))
{
this.h.remove(paramBluetoothDevice);
}
}
//end new code
this.d.discoverServices(this.f, paramBluetoothDevice.getAddress());
return true;
}
}
我还必须使用类编辑器来删除一些“最终”修饰符,以便能够衍生出我自己的类。这是一个很大的黑客,但现在它工作得很好。一旦正式版本发布并移植我的代码,我将把我的 S4 升级到 android 4.3,所以手指交叉这也适用于 android 4.3。
我认为 SAMSUNG BLE API 和 Google 的 API 有 Broadcom Ble 堆栈,而 Broadcom 堆栈目前不支持多个 ble 设备。
如果您为要连接的每个设备实现不同的BluetoothGatt
实例和不同的实例,它应该适用于所有人......GattCallback