Mam aplikację na Androida 6 - poziom 23 działającą na urządzeniach mobilnych, która jednocześnie ogłasza i skanuje bezpołączeniowe pakiety BLE.

KWESTIA:

Uważam, że kiedy wywołuję stopAdvertising (), ciągła operacja skanowania BLE zostaje zatrzymana lub przestaje działać na 1-4 sekundy, zanim zostanie wznowiona. Wiem o tym, ponieważ z łatwością widzę, że ciągle otrzymywane pakiety reklam co 0,10 sekundy nie są odbierane przez 1-4 sekundy. Oznacza to, że operacja skanowania jest zatrzymywana lub zatrzymywana, gdy operacja anonsowania zostanie zatrzymana programowo.

Jak mogę okresowo uruchamiać i zatrzymywać reklamy BLE bez niekorzystnego zakłócania operacji skanowania BLE?

Próbowałem opracować moją aplikację przy użyciu różnych interfejsów API wersji Androida z tym samym irytującym problemem zatrzymania skanowania: Android 6 - poziom 23 Android 8 poziom 26

Dla porównania, oto kilka fragmentów kodu Androida 6:

       // create advertiser and save in list, so advertising instance can be stopped in future.           
       mBluetoothAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();

       // start advertising!
       mBluetoothAdvertiser.startAdvertising( settings, data, mBluetoothAdvertiseCallback );

       // do some work...

      // TESTED BAD - the call below causes the BLE scan operation to halt for 1-4 seconds.
       mBluetoothAdvertiser.stopAdvertising(mBluetoothAdvertiseCallback);
1
kjhuebner 20 listopad 2019, 18:31

1 odpowiedź

W stosie Bluetooth systemu Android skanowanie i reklama są całkowicie niezależne. Wszystkie operacje są po prostu wysyłane do układu Bluetooth, a skanowanie i ogłaszanie zależy od oprogramowania układowego.

Chip Bluetooth, który zwykle ma tylko jedno radio, musi zaplanować skanowanie i reklamy, ponieważ w tym samym czasie można wykonać tylko jedną operację.

Najwyraźniej widzisz tego efekt. Algorytmy planowania używane przez różnych producentów chipów Bluetooth są zastrzeżone i zwykle nie są dostępne publicznie. Musisz zapytać producenta konkretnego urządzenia, z którego korzystasz, dlaczego zachowuje się w określony sposób.

Android wysyła jednak wskazówkę dotyczącą interwału skanowania. W Androidzie interwał wynosi 5 sekund, więc prawdopodobnie wpływa to na Twoje wyniki.

0
Emil 20 listopad 2019, 23:41
Dziękuję uprzejmie e-mail za odpowiedź! -Rozpoznać
 – 
kjhuebner
22 listopad 2019, 03:29