ответ

2

Да, с помощью библиотеки можно обнаружить устройства BLE без маяка. Вы также можете рассчитать расчетное расстояние до устройств, если сначала измерить известную rssi на одном метре для устройства.

Приведенный ниже код показывает, как это сделать:

final DistanceCalculator distanceCalculator = new ModelSpecificDistanceCalculator(this, null); 
    final int rssiAtOneMeter = -59; 

    mBeaconManager.setNonBeaconLeScanCallback(new NonBeaconLeScanCallback() { 
     @Override 
     public void onNonBeaconLeScan(BluetoothDevice bluetoothDevice, int rssi, byte[] bytes) { 
      Double estimatedDistnaceInMeters = distanceCalculator.calculateDistance(rssiAtOneMeter, rssi); 
      // TODO: do something with estimatedDistanceInMeters 
     } 
    }); 
+0

Спасибо, я вижу, что setNonBeaconLeScanCallback был добавлен в последней версии. – Droider

+0

Очень приятная особенность. Однако обратный вызов запускается только один раз, хотя устройство BLE без маяка все еще рекламируется, и beaconManager по-прежнему получает обратные вызовы от маяковых устройств. Есть ли какой-нибудь трюк в настройке beaconManager? (например, на iOS мы можем сказать, хотим ли мы обнаружить только один раз на каждом устройстве или получать уведомление в каждом раунде сканирования ... может ли такое правило произойти в этом случае?) – JBA

+0

Дополнительная информация: проблема, которую я только что описал выше, происходит на Samsung S4 mini с Android 4.4.2. На Nexus 5x с Android 7.1.2 обратный вызов работает так, как ожидалось (уведомляет несколько раз о присутствии). Любая подсказка о том, что Android 7 имеет/делает, что 4.4 не ...? – JBA

Смежные вопросы