program documentacion development developers java android kotlin android-9.0-pie

java - documentacion - startScan() en WifiManager en desuso en Android P



documentacion android (7)

Cómo obtener el resultado del escaneo de wifi, por ejemplo, cada 3 segundos, sin mWifimanager.startScan();

Google dice:

startScan() This method was deprecated in API level P. The ability for apps to trigger scan requests will be removed in a future release.

Aviso para este nivel de API Estoy usando List<ScanResult> results = mWifiManager.getScanResults(); sin llamar a startScan , la lista contiene los startScan wifi, pero se actualiza muy, muy lentamente

Actualización al 12 de enero de 2019: https://issuetracker.google.com/issues/112688545


Creo que Google está planeando restringir la aplicación de escanear wifi.

Este método quedó en desuso en el nivel de API 28. La capacidad de las aplicaciones para activar las solicitudes de escaneo se eliminará en una versión futura. Consulte la documentación aquí.



Desde WifiManager#EXTRA_RESULTS_UPDATED

Nota: las aplicaciones que tienen el permiso android.Manifest.permission.NETWORK_SETTINGS están exentas de la limitación del análisis.

Nota: este es un permiso del sistema, las aplicaciones normales no pueden usarlo sin rootear y mover la aplicación a la ubicación "privilegiada" o hacer que se incorpore en una ROM personalizada.


El método StartScan () está en desuso en Android P y el nuevo protocolo RTT del estándar 802.11mc debe usarse con los algoritmos de trilateración. https://android-developers.googleblog.com/2018/03/previewing-android-p.html

La posición X, Y del AP debe ser conocida para un posicionamiento preciso y el AP debe admitir la Medición de Tiempo Fino de 802.11mc. Intel® Wireless-AC 9260 compatible con 802.11mc y varios AP comienzan a admitir el estándar 802.11mc.

Un par de ejemplos:


Google ahora ha documentado las limitaciones para la función startScan () en Android P:

"Estamos limitando aún más el número de exploraciones que las aplicaciones pueden solicitar para mejorar el rendimiento de la red y mejorar la vida útil de la batería.

El uso de WifiManager.startScan () está limitado a: - Cada aplicación en primer plano está restringida a 4 exploraciones cada 2 minutos. - Todas las aplicaciones de fondo combinadas están restringidas a una exploración cada 30 minutos ".

Fuente: https://issuetracker.google.com/issues/79906367

Editar 8-Ago-2018: También se ha agregado información aquí: https://developer.android.com/guide/topics/connectivity/wifi-scan


Parece que la intención de Google podría ser forzar a los desarrolladores a usar WifiRttManager para la ubicación interior al menos [1]. O confíe en los servicios de ubicación habituales de Google Play, que es una opción en algunos casos de uso, pero definitivamente no todos. Está optimizado para el caso de uso promedio. Ningún caso de uso es el caso de uso promedio.

Desafortunadamente, con la forma en que WifiRttManager calcula la ubicación, requiere que los puntos de acceso wifi tengan 802.11mc. Sin embargo, no es necesario conectarse a estos puntos. Prácticamente 0 routers hoy tienen este estándar. [2] [3] [4] Con 3 puntos de acceso, puede obtener una ubicación cercana a la precisión de 1-2m.

Sin embargo, quién sabe si también impondrán restricciones a esta funcionalidad. Simplemente no hay excusa para quitar esta opción a los usuarios y desarrolladores. Asqueroso.

Así que parece que al menos habrá una edad oscura para la ubicación en interiores. Quizás una solución es tener dispositivos a los que estés conectado y hacer ping.

[1] https://developer.android.com/reference/android/net/wifi/rtt/WifiRttManager

[2] https://github.com/Plinzen/android-rttmanager-sample

Lectura adicional

[3] https://en.wikipedia.org/wiki/IEEE_802.11mc

[4] https://fit-iot.com/web/wifi-indoor-positioning/


startScan () en realidad es bastante defectuoso en P, ya que planteé https://issuetracker.google.com/issues/79906367 .

Tampoco creo que WifiScanner sea el reemplazo, ya que está marcado como SystemApi, lo que significa que no hay acceso para las aplicaciones ...

Ojalá nos enteremos pronto, ya que RTT todavía significa que necesita buscar AP que sean compatibles con 802.11mc usando ScanResult is80211mcResponder que verifique antes de realizar el rango de RTT en el AP.