Android - несколько BluetoothBleScanner

У меня есть приложение Cordova для iOS/Android. Javascript для приложения обслуживается веб-сервером, который, конечно, делает обновление приложения очень простым - никаких выпусков AppStore нет, если это не изменение плагина Cordova.

Теперь приложение использует BLE несколькими различными способами.

  1. BLE Beacons
  2. BLE Температурные зонды
  3. BLE pH-зонды
  4. Другие устройства BLE - будущее развитие

Каждый из вышеперечисленных, по сути, является "мини" клиентом плагина Cordova BLE, который я разработал - я не могу использовать cordova-bluetooth-serial, поскольку этот плагин допускает только 1 клиент Javascript.

IOS

Под iOS решение простое, так как приложение может создать столько экземпляров CBCentralManager, сколько потребуется, и под капотом iOS будет "объединять" эти запросы с оборудованием, поэтому мой Javascript для "BLE Beacons" создает новый объект "BluetoothScanner", который в iOS создает CBCentralManager, и он может выполнять сканирование и получать рекламные пакеты для маяков (только Eddystone, он не увидит iBeacon, поскольку iOS перенаправляет их в CoreLocation - я отвлекся)

Android

Под Android я надеялся, что однажды получу экземпляр синглтона BluetoothAdapter через

    _bluetoothAdapter = bluetoothManager.getAdapter();

это призвание

    _scanner = _bluetoothAdapter.getBluetoothLeScanner();

также вернул бы новый экземпляр, однако он не возвращает экземпляр Singleton, что означает, что у меня не может быть отдельных "мини" клиентов, каждый из которых выполняет свое собственное сканирование (со своим собственным фильтром ServiceUUID), как поддерживает iOS.

Итак, мой вопрос - есть ли способ динамического создания Сервиса для каждого "мини" клиента в надежде, что эти Сервисы получат свой собственный BluetoothLeScanner?

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

Честно говоря, я не совсем в пространстве Android Process, поэтому не понимаю, возможно ли это или нет.

Если нет, то мне придется самому "виртуализировать" BluetoothLeScanner, поэтому с помощью единственного экземпляра мне придется объединять запросы сканирования от "мини" клиентов с запросами, которые соответствуют всем требованиям "мини" клиентов, и, возможно, фильтровать рекламные объявления. на лету к "мини" клиентам.

Любая помощь высоко ценится.

1 ответ

Я не уверен, как это будет отличаться или нет, является ли это одиночным или нет, но BluetoothLeScanner является одиночным, просто посмотрите исходный код на https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/bluetooth/BluetoothAdapter.java.

Вы также можете создать несколько сканеров одновременно, как iOS. Просто вызывайте startScan с разными объектами scanCallback каждый раз.

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