2010-12-07 36 views
6

J'essaie de détecter les changements de force du signal dans une connexion wifi. Je suis confus de la méthode que je devrais utiliser dans mon BroadcastReceiver. Quelle est la différence entre l'utilisation de getConnectionInfo() et getScanResults() - à partir de laquelle puis-je utiliser la méthode appropriée pour obtenir la valeur rssi? Par exemple: si j'utilise getConnectionInfo(), j'utilise getRssi() plus tard. Ou je pourrais utiliser getScanResults() et la propriété "level". Je montre leurs valeurs en utilisant Toast et il ne montre pas toujours les mêmes valeurs. Lorsque le connechage wifi est perdu, getConnectionInfo(). GetRssi() affiche -200, alors que result.level affiche toujours sa valeur précédente.différence entre getConnectionInfo() et getScanResults() pour détecter les changements de force du signal

Des pensées? Merci!

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; 
    } 
} 

Répondre

1

Vous utilisez getScanResults() uniquement si vous utilisez startScan(). Une analyse est asynchrone et envoie une diffusion SCAN_RESULTS_AVAILABLE_ACTION lorsqu'elle est terminée. De plus, les résultats de l'analyse seront pour tous les points d'accès détectés par l'analyse, qui peuvent inclure des points d'accès autres que celui auquel vous êtes connecté, si vous êtes connecté à quoi que ce soit.

+0

* Veuillez voir l'extrait de code * J'utilise ces deux méthodes pour détecter la valeur rssi de la connexion actuelle. Et oui, j'utilise startScan(). Ok, dans ce cas, il est tout simplement incorrect d'utiliser getConnectionInfo(). GetRssi()? Qu'en est-il de l'envoi de la diffusion RSSI_CHANGED_ACTION, puis de l'utilisation de la fonction intention.getIntExtra (WifiManager.EXTRA_NEW_RSSI, 0) pour obtenir la nouvelle valeur rssi? Est-ce également le cas de SCAN_RESULTS_AVAILABLE_ACTION, qui récupère les points d'accès? Donc, il pourrait redonner la valeur rssi d'un autre AP tant que la valeur est différente de la précédente? – springrolls

+0

Selon un livre que je viens de lire, RSSI_CHANGED_ACTION donne les rssi actuels du réseau wifi connecté. Donc maintenant, dans ma compréhension, nous pouvons utiliser l'une des trois méthodes pour afficher les changements rssi. Mais il y a une condition spécifique pour chacun: 1. Si vous diffusez SCAN_RESULTS_AVAILABLE_ACTION (et donc, utilisez startScan()), utilisez getScanResults() et récupérez la propriété "level" pour le réseau auquel vous êtes actuellement connecté. 2. Utilisez getConnectionInfo(). GetRssi() mis à jour toutes les x secondes. 3. Ou si vous diffusez RSSI_CHANGED_ACTION, utilisez EXTRA_NEW_RSSI - qui, dans mon cas, devrait mieux servir à détecter les changements rssi. – springrolls

2

En un mot, RSSI est disponible uniquement entre votre appareil et le point d'accès auquel vous êtes connecté. (RSSi est le niveau de signal d'un point d'accès auquel vous êtes connecté)

mais lorsque vous voulez obtenir le niveau de tous les points d'accès wifi dans la plage, vous devez utiliser startScan et obtenir scanResult et obtenir la propriété de niveau pour chaque dans la gamme wifi point d'accès.

est-ce utile?