Поддерживает ли Android 4.3 несколько подключений устройств BLE?

В настоящее время я работаю на Android 4.3 Bluetooth Low Energy, я могу подключиться к устройству, получить службы, службы чтения / записи. Теперь, когда я пытаюсь подключиться ко второму устройству, сервисы второго устройства принимаются, а сервисы первого устройства теряются. Теперь, когда я пытаюсь подключиться для записи / чтения характеристики первого устройства, ничего не работает.

Кто-нибудь пытался подключиться к нескольким устройствам. Как вы инициализируете Gatt для двух устройств?

3 ответа

Это должно работать для всех, если вы реализуете разные BluetoothGatt экземпляр и разные GattCallback для каждого устройства, которое вы хотите подключить...

Я думаю, что SAMSUNG BLE API и Google API имеют стек Broadcom Ble и стек Broadcom, которые в настоящее время не поддерживаются несколькими устройствами.

У меня было точно такое же поведение в стеке Samsung BLE (galaxy S4). Я взломал код Samsung и исправил его:

Класс 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.

Другие вопросы по тегам