Продолжаем обсуждение ограничений Google и способов их обойти

Сегодня я хочу обсудить регулирование сканирования Wi-Fi в новых версиях Android и способы его избежать. Раньше я писал статью о новом механизме сканирования в недавно выпущенном Android R. Если вы читаете эту статью, то знаете, что Google ограничивает возможности разработчиков сканировать WiFi, как и в предыдущих версиях Android.

Итак, давайте начнем нашу статью с обзора того, как это работало раньше и как получить аналогичные результаты сейчас с новым Android R.

Как это работало раньше

Эта часть статьи будет простой и без каких-либо ограничений. Не было никаких ограничений, включая Android Oreo, и вы могли сканировать каждую секунду без какого-либо троттлинга. Вот простой фрагмент кода, объясняющий, как это работало раньше:

Вы просто регистрируете широковещательный приемник в своем контексте для получения результатов сканирования и их анализа. Затем вы вызываете метод start scan в своем менеджере WiFi, и он работает как шарм. Было время, когда Android позволял сканировать WiFi до десяти раз в секунду. Только представьте, какой потенциал открывается у качественной навигации.

Но потом все пошло не так, и Google ввел ограничения на сканирование Wi-Fi.

Android 9 и 10

После выхода Android 9 компания Google преподнесла сюрприз всем разработчикам. Сканирование WiFi было максимально обрезано. Теперь вы можете запускать сканирование только четыре раза каждые 120 секунд. Если вы попытаетесь запустить сканирование несколько раз, все ваши попытки будут заблокированы.

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

Кстати, Google представил решение с выпуском Android 10. Они добавили кнопку, позволяющую отключить дросселирование сканирования WiFi в настройках разработчика, так что теперь вы можете выключить его и сканировать без ограничений. Но если вы напишете общее решение для всех устройств, то вы не узнаете, отключена эта опция или нет. И основная проблема - это устройства с настраиваемой ОС (например, Huawei, Xiaomi и т. Д.), Потому что у них нет возможности отключить дросселирование.

Android R и решение

Android R был выпущен несколько недель назад, и Google представил новое сканирование, потому что старое было устаревшим с выпуском Android 9. Итак, теперь они добавили функцию для проверки, отключено ли регулирование:

Вам просто нужно убедиться, что дроссельная заслонка отключена, и вы можете сканировать без каких-либо ограничений. Кстати, это решение годится только в том случае, если вы тестируете свое локальное приложение. Для распространения через Play Market и другие платформы это решение может быть очень плохим, потому что пользователям нужно будет включить режим разработчика и найти там эту опцию.

Заключение

Google ограничил частое сканирование Wi-Fi, но добавил возможность отключения дросселирования. Похоже, они поняли, что принимали неверные решения, и пытаются как-то это исправить. Однако это по-прежнему создает трудности как для разработчиков, так и для пользователей.

С другой стороны, на iOS вообще нет возможности сканировать Wi-Fi, поэтому мы должны быть благодарны за то, что у нас есть.