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/