Различный интервал времени между рекламой устройства BLE и обратным вызовом из startScan телефона Android - PullRequest
1 голос
/ 19 сентября 2019

Я использую телефон Android для обнаружения маяка с помощью метода startScan, интервал времени обращения маяка составляет 800 мс, но я получал данные маяка от обратного вызова startScan каждые 3 ~ 10 секунд.Я ожидаю, что я могу получать данные каждую 1 секунду.

Ниже приведены мои коды.Есть ли другие способы оправдать мои ожидания?Или кто-то может объяснить, почему интервал времени не совпадает с временем обращения?

 ScanSettings.Builder builder = new ScanSettings.Builder()
        .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY);

    // scan filters has been set the right value.
    bluetoothLeScanner.startScan(scanFilters, builder.build(), scanCallback);

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

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

  1. Ваше устройство BLE не рекламирует так часто, как вы ожидаете
  2. Ваш телефон Android (возможно, но маловероятно)
  3. Некоторые другие аспекты вашегокод, который вы не указали в своем вопросе.

Является ли ваше устройство BLE маяком?Если это так, я предлагаю:

  1. Установить BeaconScope на тот же телефон, отсканировать ваш маяк, затем проверить рейтинг PPS (пакетов в секунду - сканировать не менее 30 секундпока измерение не стабилизируется).Если вы видите значение 0,1-0,3, то проблема НЕ в вашем коде, а должна быть (1) или (2).Если вы видите намного более высокое значение PPS, проблема заключается в том, что какой-то другой аспект вашего кода не показан.
  2. Используйте второй телефон Android с BeaconScope в качестве передатчика и передавайте маяк с частотой 10 Гц по умолчанию.Ваше приложение получает пакет каждые 100-200 мс?Если это так, то вы подтвердили, что проблема в том, что ваше устройство BLE не передает столько, сколько вы ожидаете.

Если ваше устройство BLE не является маяком, вы можете по крайней мере выполнить второй тест.

0 голосов
/ 19 сентября 2019

Рекомендуется использовать режим «SCAN_MODE_LOW_LATENCY» только тогда, когда приложение работает на переднем плане.

Если вы находитесь в фоновом режиме, вы можете запустить службу липкого переднего плана и установить периодическую частоту 1 сек для вашегоservice.

Также сканирование Ble в течение 1 секунды может быть чрезвычайно тяжелым для приложения.

...