Android扫描Wifi网络

时间:2010-06-05 19:28:01

标签: android wifi android-wifi

我正在尝试扫描无线网络,并在网上找到了这个有用的来源。 不幸的是它没有用,我不明白为什么。我的问题是,我不能等待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");
        }

5 个答案:

答案 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

  1. 注册
  2. 然后启动扫描并执行此操作

    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
    
    super.onReceive(context, intent);           
    //Scan is ok, just need few seconds!
    }