Android 4.3是否支持多个BLE设备连接?

时间:2013-08-20 05:49:17

标签: android bluetooth connection bluetooth-lowenergy

我目前正在研究Android 4.3蓝牙低功耗,我能够连接到设备,获取服务,读/写服务。现在,当我尝试连接到第二个设备时,会收到第二个设备的服务,并且第一个设备服务丢失。现在,当我尝试连接第一个设备的写/读特性时,没有任何作用。

是否有人尝试连接多台设备。你如何为两个设备初始化Gatt?

3 个答案:

答案 0 :(得分:0)

我认为SAMSUNG BLE API和Google的API目前不支持Broadcom Ble堆栈和Broadcom堆栈。

答案 1 :(得分:0)

我在三星BLE堆栈(galaxy S4)上有完全相同的行为。我攻击了三星代码并修复了它:

BluetoothGatt类保留了“所有”已发现服务的列表。对BluetoothGatt-> discoverServices的调用将清除此列表。我启动了自己的类并修改了函数的行为,只删除了相关的BluetoothDevice的服务。这是我的代码:

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。

答案 2 :(得分:0)

如果您为要连接的每个设备实施不同的BluetoothGatt实例和不同的GattCallback,它应该适用于所有人...