startScan() в WifiManager устарел в Android P
Как получить результат сканирования с Wi-Fi, например, каждые 3 секунды, без mWifimanager.startScan();
Google говорит:
startScan() This method was deprecated in API level P. The ability for apps to trigger scan requests will be removed in a future release.
Обратите внимание, что для этого уровня API я использую List<ScanResult> results = mWifiManager.getScanResults();
без вызова startScan
, список содержит startScan
доступа Wi-Fi, но делает обновление очень-очень медленным
Обновление до 12 января 2019 года: https://issuetracker.google.com/issues/112688545
Ответы
Ответ 1
Теперь Google зафиксировал ограничения для функции startScan() в Android P:
"Мы также ограничиваем количество приложений сканирования, которые могут потребовать улучшения производительности сети и увеличения срока службы батареи.
Использование WifiManager.startScan() ограничено: - каждое приложение переднего плана ограничено 4 просмотрами каждые 2 минуты. - Все фоновые приложения в сочетании ограничены одним сканированием каждые 30 минут ".
Источник: https://issuetracker.google.com/issues/79906367
Редактировать 8-Aug-2018: информация была добавлена также здесь: https://developer.android.com/guide/topics/connectivity/wifi-scan
Ответ 2
Я думаю, что в уровне API P они планируют перенести startScan() в другой класс (WifiScanner) вместе с некоторыми ключевыми отличиями.
См. Https://android.googlesource.com/platform/frameworks/base/+/android-p-preview-1/wifi/java/android/net/wifi/WifiScanner.java
Если есть альтернативное решение этого, я бы тоже хотел его услышать.
На данный момент я могу просто использовать startScan(), пока не будут опубликованы официальные документы.
Ответ 3
startScan() на самом деле довольно глючит P, поскольку я поднял Google Issue 79906367.
Я не думаю, что WifiScanner также является заменой, поскольку это отмечено как SystemApi, что означает отсутствие доступа к приложениям...
Надеюсь, мы скоро услышим, так как RTT по-прежнему означает, что вам нужно сканировать точки доступа, которые поддерживают 802.11mc, используя ScanResult is80211mcResponder, который вы проверяете перед выполнением RTT Ranging на AP.
Ответ 4
Метод StartScan() устарел в Android P, и новый протокол RTT из стандарта 802.11mc должен использоваться с алгоритмами трилатерации. https://android-developers.googleblog.com/2018/03/previewing-android-p.html
X, Y позиции AP должны быть предназначены для точного позиционирования, и точка доступа должна поддерживать 802.11mc Fine Time Measurement. Intel® Wireless-AC 9260 поддерживает 802.11mc, а несколько точек доступа начинают поддерживать стандарт 802.11mc.
Несколько примеров:
Ответ 5
Из WifiManager # EXTRA_RESULTS_UPDATED
Примечание. Приложения, имеющие разрешение android.Manifest.permission.NETWORK_SETTINGS, освобождаются от ограничения сканирования.
Примечание. Это системное разрешение, обычные приложения не могут использовать его без рутирования и перемещения приложения в "привилегированное" местоположение или его вставки в пользовательское ПЗУ.
Ответ 6
Я думаю, что Google планирует ограничить приложение от сканирования Wi-Fi.
Этот метод устарел на уровне API 28. Возможность приложений для запуска запросов на сканирование будет удалена в следующем выпуске. Проверьте документацию здесь.
Ответ 7
Похоже, что намерение Googles может заставить разработчиков использовать WifiRttManager вместо этого как минимум в помещениях [1]. Или полагайтесь на обычные службы определения местоположения в Google Play, что является опцией в некоторых случаях использования, но определенно не во всех. Он оптимизирован для среднего варианта использования. Нет варианта использования - это средний вариант использования.
К сожалению, из-за того, что WifiRttManager вычисляет местоположение, для точек доступа Wi-Fi требуется 802.11mc. Однако вам не нужно подключаться к этим точкам. Практически 0 маршрутизаторов сегодня имеют этот стандарт. [2] [3] [4] С 3 точками доступа вы можете получить местоположение с точностью до 1-2 м.
Кто знает, будут ли они накладывать ограничения и на эту функциональность? Нет просто оправдания тому, чтобы отобрать этот выбор у пользователей и разработчиков. Отвратительно.
Так что, похоже, наступит темный век для помещений. Возможно, обходной путь - иметь устройства, к которым вы подключены, и пинговать их.
[1] https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager
[2] https://github.com/Plinzen/android-rttmanager-sample
Дополнительное чтение
[3] https://en.wikipedia.org/wiki/IEEE_802.11mc
[4] https://fit-iot.com/web/wifi-indoor-positioning/