Невозможно получить значения RSSI из BLE nordi c штука: 52 - PullRequest
3 голосов
/ 19 февраля 2020

Мне удалось через библиотеку Nordi c для Android thingylib ( github ) подключиться к thingy52 и получить в обработчике обратного вызова ThingyListener информацию об устройстве (например, onGravityVectorChangedEvent, onAccelerometerValueChangedEvent, onGyroscopeValueChangedEvent и т. Д.).

Что я не могу сделать (и не могу найти, как это сделать), так это как я могу получить информацию о связи с устройством, именно значения RSSI.

Используя BluetoothLeScannerCompat , внутри обратного вызова сканирования onBatchScanResults, я обнаруживаю устройство Bluetooth штуковины52 и его значение RSSI, но если я установил высокую частоту сканирования, например .setReportDelay(10) Это почти всегда не обнаруживает устройства Норди c thingy52, которую я не могу получить из событий ThingyListener.

Как я могу это сделать? Заранее спасибо.

Пример моего ThingyListener:

  private ThingyListener mThingyListener = new ThingyListener() {


        @Override
        public void onGravityVectorChangedEvent(BluetoothDevice bluetoothDevice, float x, float y, float z) {
            // Here I got the data from device... but no RSSI value

    };

1 Ответ

1 голос
/ 06 мая 2020

Я наконец решил таким образом:

Я не использую ScannerCompact, но BluetoothGATT:

, когда я связываю nordi c к ThingyLibSdkManager я также связываю его с GATT:

ThingyListenerHelper.registerThingyListener(getApplicationContext(), mThingyListener, device);
mBluetoothGatt = device.connectGatt(getApplicationContext(), true, gattCallback);

с этим, внутри mThingylistener теперь я могу запросить rssi:

     @Override
        public void onGyroscopeValueChangedEvent(BluetoothDevice bluetoothDevice, float x, float y, float z) {

            collectedData.put("onGyroscopeValueChangedEvent_x", x + "");
            collectedData.put("onGyroscopeValueChangedEvent_y", y + "");
            collectedData.put("onGyroscopeValueChangedEvent_z", z + "");

            // request rssi from gatt
            // mBluetoothGatt.readRemoteRssi();
        }

теперь, в асинхронном режиме c, вы получите обратный вызов внутри mBluetoothGatt:

   @Override
        public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
// do some stuff
}
...