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 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.
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.