Je suis en train de planifier un balayage wifi toutes les 1 seconde que le délai actuel de 6 secondes entre chaque résultat de balayage est trop long pour moi. Je pense que cela fonctionne, mais je comprends à peine le fonctionnement ou le résultat. Voici le code de base indiquant à la minuterie de commencer wifiMgr.startScan();
toutes les 1000 ms.résultat inattendu en utilisant minuterie pour wifi scan android
private void startNetworkScan() {
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}
}, 0, 1000);
}
private void TimerMethod() {
this.runOnUiThread(rTimer);
}
private Runnable rTimer = new Runnable() {
public void run() {
wifiMgr.startScan();
Bundle bb = wifiScanReceiver.getResultExtras(true);
txtList.append("Result " + bb.getString("scanresult") + "\n");
}
};
Voici le code de la classe BroadcastReceiver. Je viens d'afficher l'horodatage et les informations connexes à partir du point d'accès.
private void handleScanResultsAvailable() {
List<ScanResult> results = wifiMgr.getScanResults();
String currentTimeStr = new SimpleDateFormat("HH:mm:ss").format(new Date());
Bundle b = new Bundle();
StringBuilder sb = new StringBuilder();
sb.append(i + ": " + currentTimeStr);
for (ScanResult result : results) {
sb.append(String.format(" SSID: %s, RSSI: %s dBm ", result.SSID, result.level));
}
b.putString("scanresult", sb.toString());
setResultExtras(b);
i++;
}
Et voici un extrait du résultat:
Result 1: 10:04:12 SSID: XXXXX, RSSI: -88 dBm
Result 1: 10:04:12 SSID: XXXXX, RSSI: -88 dBm
Result 2: 10:04:14 SSID: XXXXX, RSSI: -87 dBm
Result 2: 10:04:14 SSID: XXXXX, RSSI: -87 dBm
La plupart du temps chaque résultat est affiché tous les 1-2 secondes, ce qui est tout à fait bonne. Ce que je ne comprends pas, c'est que pour chaque résultat, j'ai toujours deux lignes avec la même valeur. Je pense effectivement qu'il devrait y avoir des résultats qui se chevauchent, car wifiMgr.startScan()
est pas arrêté à chaque exécution par la minuterie, comme ceci:
// there are ca. 6-7 lines for every record
// as the wifi scanresult delay is 6 secs
Result 1: 10:03:40 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:41 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:42 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:43 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:44 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:45 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:45 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:46 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:46 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:47 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:47 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:48 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:48 SSID: XXXXX, RSSI: -85 dBm
Quelqu'un peut-il faire la lumière? - Le code est-il correct, le résultat est-il correct? Apprécierait toute explication sur la logique derrière cela.
Mise à jour: Voici le reste du code BroadcastReceiver.
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
handleScanResultsAvailable();
}
}
Oui, il affichera plus d'un SSID dans une ligne de résultat. Le résultat ci-dessus montre un seul SSID car l'application n'a détecté qu'un seul SSID quand je l'ai testé. Auparavant sans temporisateur, je produisais les résultats dans handleScanResultsAvailable, mais il affiche une sortie normale comme si je n'utilisais pas de temporisateur. Je poste la sortie du journal ici, http://pastebin.com/zFjfuL7t Merci d'avoir pris le temps! – springrolls
1. Ces résultats sont-ils les plus récents depuis le début de l'activité, car ils semblent tous les deux montrer que les données sont reçues avant que l'appel ne soit demandé? 2. Pourriez-vous coller plus de votre code de récepteur de diffusion. 3. Existe-t-il une routine onReceive? Quelle est l'action passée dans l'intention? 4.Savez-vous combien de temps il faut entre l'appel de startscan et la réception des résultats de scan? Autant de questions :-) – FrinkTheBrave
Oui, ce sont des résultats du début de l'activité. Les premières lignes montrant null ou rien sont quand il n'y a aucun résultat d'analyse disponible pour le moment. Je suppose que cela prend environ 5 secondes. Fondamentalement, je viens de fusionner le code entre BroadcastReceiver pour 'SCAN_RESULTS_AVAILABLE_ACTION' et Timer (en utilisant [ce] tutoriel (http://steve.odyfamily.com/?p=12)). Quand je clique sur un bouton, il démarre une minuterie qui exécute 'startScan()' toutes les 1 s. – springrolls