2010-12-07 12 views
6

Estoy tratando de detectar cambios en la intensidad de la señal en una conexión wifi. Estoy confundido de qué método debo usar en mi BroadcastReceiver. ¿Cuál es la diferencia entre usar getConnectionInfo() y getScanResults() - desde donde puedo usar el método relevante para obtener el valor de rssi?diferencia entre getConnectionInfo() y getScanResults() para detectar cambios en la intensidad de la señal

Por ejemplo: si uso getConnectionInfo(), luego uso I getRssi(). O podría usar getScanResults() y la propiedad "level".

Muestro sus valores usando Toast y no siempre muestra los mismos valores. Cuando se pierde la conexión wifi, getConnectionInfo(). GetRssi() muestra -200, mientras que result.level aún muestra su valor anterior.

¿Alguna idea? ¡Gracias!

String netSSID = wifi.wifiMgr.getConnectionInfo().getSSID(); 
int netRSSI = wifi.wifiMgr.getConnectionInfo().getRssi(); 

List<ScanResult> results = wifi.wifiMgr.getScanResults(); 
for (ScanResult result : results) { 
    if (result.SSID.equalsIgnoreCase(netSSID)) { 
     anothernetRSSI = result.level; 
    } 
} 

Respuesta

1

Se utiliza getScanResults() sólo si se utiliza startScan(). Una exploración es asíncrona y envía una transmisión SCAN_RESULTS_AVAILABLE_ACTION cuando se completa. Y, los resultados del escaneo serán para cualquier punto de acceso que encuentre el escaneo, que puede incluir puntos de acceso distintos al que está conectado, si está conectado a algo.

+0

* Por favor, vea el fragmento de código * Ahí utilizo esos dos métodos para detectar el valor rssi de la conexión actual. Y sí, uso startScan(). Ok, entonces en este caso no es correcto usar getConnectionInfo(). GetRssi()? ¿Qué hay de enviar la transmisión de RSSI_CHANGED_ACTION y luego usar intent.getIntExtra (WifiManager.EXTRA_NEW_RSSI, 0) para obtener el nuevo valor de rssi? ¿Es este también el mismo caso que SCAN_RESULTS_AVAILABLE_ACTION, que recupera los puntos de acceso? Entonces, ¿podría devolver el valor rssi de otro AP siempre que el valor sea diferente al anterior? – springrolls

+0

De acuerdo con un libro que acabo de leer, RSSI_CHANGED_ACTION da el rssi actual de la red wifi conectada. Entonces, según entiendo, podemos usar uno de los tres métodos para mostrar los cambios rssi. Pero hay una condición específica para cada uno: 1. Si transmite SCAN_RESULTS_AVAILABLE_ACTION (y por lo tanto, use startScan()), use getScanResults() y recupere la propiedad "level" para la red a la que está conectado actualmente. 2. Utilice getConnectionInfo(). GetRssi() actualizado cada x segundos. 3. O si transmite RSSI_CHANGED_ACTION, use el EXTRA_NEW_RSSI, que en mi caso debería servir mejor para detectar cambios de rssi. – springrolls

2

En una palabra, RSSI solo está disponible entre su dispositivo y el punto de acceso al que está conectado. (RSSi es el nivel de señal de un punto de acceso al que está conectado)

pero cuando desee obtener el nivel de todos los puntos de acceso wifi en rango, debe usar startScan y obtener scanResult y obtener la propiedad de nivel para cada en el punto de acceso wifi de rango.

¿Esto es útil?

Cuestiones relacionadas