我正在尝试扫描无线网络,并在网上找到了这个有用的来源。 不幸的是它没有用,我不明白为什么。我的问题是,我不能等待10分钟的结果 - 我需要它们在几秒钟内,并考虑设置布尔变量等待假一旦得到结果....好吧,它运行永远..看起来没什么收到的。任何的想法 ?感谢。
// -- 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");
}
答案 0 :(得分:10)
你需要实现一个BroadcastReceiver,监听从WifiManager.startScan(). onReceive()
返回的扫描结果,允许你直接访问扫描结果。
扫描完成大约需要1秒钟并触发onReceive()
...
答案 1 :(得分:4)
你把这段代码放在哪里?在活动的onCreate
?
问题是你正在注册一个回调函数,当你收到扫描结果时会调用它,according to the Android API docs是在一个单独的线程中完成的,所以你的繁忙等待循环在这种情况下什么也没有实现,除了不必要地暂停你的活动,如果它在onCreate
期间意味着它永远不会退出该方法。
答案 2 :(得分:3)
嗯我对加快这个过程一无所知,可能只是需要一段时间才能找到wifi信号(那个,或者你的wifi没有打开......这是你的程序应该检查的东西在它开始之前)。但是,您可以做的一件事就是使用startActivityForResult()在不同的活动中完成所有这些工作。这样你的“主要”活动就可以在完成后对数据进行操作,而你不必在while循环中吃掉cpu。
public void onActivityResult(....){
switch(retCode){
case SCAN_ACTIVITY:{
//do stuff
}
}
}
答案 3 :(得分:3)
好的,我发现了错误。
这是循环。看起来onReceive函数永远不会被调用,因为活动只运行此循环。看起来程序必须到达函数的末尾才能执行其他函数,如OnReceive ...
感谢您的帮助。它帮助我改善了一点:)
答案 4 :(得分:0)
你应该像这样写BroadcastReceiver
:
然后启动扫描并执行此操作
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
super.onReceive(context, intent);
//Scan is ok, just need few seconds!
}