4

我正在尝试扫描无线网络,并在网上找到了这个有用的资源。不幸的是,它不起作用,我不知道为什么。我的问题是我不能等待 10 分钟的结果 - 我需要它们在几秒钟内,并考虑在得到结果后立即将布尔变量设置为 false ......好吧,它永远运行...... . 看起来没有收到任何东西。任何想法 ?谢谢。

// -- 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");
        }
4

5 回答 5

9

您需要实现一个 BroadcastReceiver 侦听从返回的扫描结果,WifiManager.startScan(). onReceive()以便您可以直接访问扫描结果。扫描完成并触发大约需要 1 秒onReceive()...

于 2010-08-11T08:52:07.400 回答
3

你把这段代码放在哪里?在onCreate活动中?

问题是您正在注册一个回调,当您收到扫描结果时将调用该回调,根据 Android API 文档,该回调是在单独的线程中完成的,因此在这种情况下,您的忙等待循环除了不必要地停止之外什么也没有实现您的活动,如果它在此期间,则onCreate意味着它永远不会退出该方法。

于 2010-06-05T22:51:38.423 回答
2

好的,我发现了错误。

这是循环。看起来 onReceive 函数永远不会被调用,因为活动只运行这个循环。看起来程序必须到达函数的末尾才能执行其他函数,如 OnReceive ...

感谢您的帮助。它帮助我改进了一点:)

于 2010-06-06T01:21:02.607 回答
2

好吧,我对加快进程一无所知,可能只是需要一段时间才能找到 wifi 信号(或者你的 wifi 没有打开......这是你的程序在开始之前应该检查的东西)。但是,您可以做的一件事来改进您的工作流程,那就是使用 startActivityForResult() 在不同的活动中完成所有这些工作。这样,您的“主要”活动将能够在完成后对该数据采取行动,并且您不必在 while 循环中消耗 CPU。

public void onActivityResult(....){
   switch(retCode){
   case SCAN_ACTIVITY:{
         //do stuff
      }
   }
}
于 2010-06-05T22:36:22.380 回答
0

你应该BroadcastReceiver这样写:

  1. 注册它
  2. 然后 startScan 并这样做

    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
    
    super.onReceive(context, intent);           
    //Scan is ok, just need few seconds!
    }
    
于 2014-11-09T14:04:09.943 回答