Android-Scan für Wi-Fi-Netzwerke
Ich versuche zu Scannen für drahtlose Netzwerke und gefunden dieser hilfreiche Quelle auf dem Netz.
Leider funktioniert es nicht und ich habe keine Ahnung, warum. Mein problem ist, dass ich kann nicht warten Sie 10 Minuten für die Ergebnis - ich brauche Sie innerhalb von ein paar Sekunden und dachte über das setzen der boolschen variable wartet auf false, sobald ich ein Ergebnis bekommen.... nun, es läuft immer ... sieht aus wie nichts empfangen wird. Irgendeine Idee ? Danke.
//-- Sample WiFi implementation - http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cfae69
IntentFilter i = new IntentFilter();
i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context c, Intent i){
//Code to execute when SCAN_RESULTS_AVAILABLE_ACTION event occurs
mWifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
wireless = mWifiManager.getScanResults(); //Returns a <list> of scanResults
waiting = false;
}
}
,i);
//-- End Wifi Sample
mWifiManager.startScan();
while (waiting) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("PROJECT1","Wifi WAITING");
}
tja, netter Versuch. Hast du es testen auf einem echten Gerät oder emulator @Nils?
InformationsquelleAutor Nils | 2010-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
müssen Sie implementieren einen BroadcastReceiver hören für die scan-Ergebnisse
WifiManager.startScan(). onReceive()
ermöglicht Ihnen den Zugriff auf die scan-resuls direkt.es dauert etwa 1 Sekunde, bis der scan abgeschlossen und trigger
onReceive()
...InformationsquelleAutor xenonite
Wo steckst du diesen code? In der
onCreate
einer Aktivität?Das problem ist, dass Sie die Registrierung eines callback, das aufgerufen wird, wenn Sie erhalten die scan-Ergebnisse, die nach der Android-API-docs erfolgt in einem separaten thread, so dass Ihr busy-waiting-Schleife ist nichts erreicht in diesem Umstand außer unnötig aufzuhalten, Ihre Aktivität, und wenn es während der
onCreate
das bedeutet, dass es nie beendet die Methode.Sie werden nicht wollen, um es in eine der onCreate, onRestart, onStart-Methode, da Sie alle vor den gleichen Problem: Sie wird nie beendet diese Methoden, daher der Rückruf wird nie passieren.
InformationsquelleAutor JRL
Nun, ich nicht wissen, etwas über den Prozess zu beschleunigen, könnte es auch einfach sein, dass es eine Weile dauert, zu finden, die wifi-Signale (das, oder Sie Ihr WLAN nicht eingeschaltet ist... das ist etwas, das Ihr Programm soll überprüfen, bevor es beginnt). Jedoch, eine Sache, die Sie tun können, um Ihren Arbeitsablauf zu verbessern wäre, all dies zu tun in einer anderen activity mit startActivityForResult(). Damit ist Ihre "Haupt" - Tätigkeit wird in der Lage sein zu handeln, dass die Daten, nachdem es getan, und Sie haben nicht zu Essen, bis die cpu auf eine while-Schleife.
InformationsquelleAutor mtmurdock
Ok, ich habe den Fehler gefunden.
Es wurde die Schleife. Es sieht aus wie die onReceive-Funktion wird nie aufgerufen, da die Aktivität ausführen dieser loop nur. Sieht aus wie das Programm das Ende der Funktion zum ausführen von anderen Funktionen wie OnReceive ...
Danke für die Hilfe jeglicher Art und Weise. Es hat mir geholfen, es zu verbessern ein bisschen 🙂
InformationsquelleAutor Nils
Sollten Sie schreiben, in
BroadcastReceiver
wie diese:Dann startScan und wie diese
InformationsquelleAutor Fang