Android扫描Wifi网络

Android扫描Wifi网络,android,wifi,android-wifi,Android,Wifi,Android Wifi,我正在尝试扫描无线网络,并在网上找到了这个有用的来源。 不幸的是,它不起作用,我不知道为什么。我的问题是,我不能等待10分钟的结果-我需要他们在几秒钟内,并考虑设置布尔变量等待假一旦我得到一个结果。。。。好吧,它永远运行。。。看起来什么也没收到。有什么想法吗?谢谢 // -- Sample WiFi implementation - http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cf

我正在尝试扫描无线网络,并在网上找到了这个有用的来源。 不幸的是,它不起作用,我不知道为什么。我的问题是,我不能等待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");
        }
/--WiFi实现示例-http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cfae69
IntentFilter i=新IntentFilter();
i、 添加操作(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION);
registerReceiver(新广播接收器(){
@凌驾
接收时公共无效(上下文c,意图i){
//发生扫描结果可用操作事件时执行的代码
mWifiManager=(WifiManager)c.getSystemService(Context.WIFI_服务);
wireless=mWifiManager.getScanResults();//返回一组scanResults
等待=错误;
}
}
,i);
//--结束Wifi示例
mWifiManager.startScan();
在等待期间{
试一试{
睡眠(200);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
日志d(“项目1”、“Wifi等待”);
}

我不知道如何加快进程,可能只是需要一段时间才能找到wifi信号(或者你的wifi没有打开……这是你的程序启动前应该检查的)。但是,要改进工作流,可以使用startActivityForResult()在不同的活动中执行所有这些操作。这样,您的“主要”活动将能够在数据完成后对其进行操作,并且您不必在while循环中消耗cpu

public void onActivityResult(....){
   switch(retCode){
   case SCAN_ACTIVITY:{
         //do stuff
      }
   }
}

你把代码放在哪里?在活动的
onCreate


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

好,我发现了错误

这是一个循环。看起来onReceive函数从未被调用,因为活动仅运行此循环。看起来程序必须到达函数的末尾才能执行其他函数,如OnReceive


无论如何谢谢你的帮助。它帮助我改进了一点:)

您需要实现一个广播接收器,监听从
WifiManager.startScan()返回的扫描结果。onReceive()
允许您直接访问扫描结果。
扫描完成并触发
onReceive()

大约需要1秒的时间。您应该这样写
BroadcastReceiver

  • 登记
  • 然后开始这样做

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

  • 是的,它是在onCreate方法中。。。我现在把它移到了OnStart,但它仍然不起作用。。。似乎从未调用onReceive函数。。。可能有什么地方出错了吗?我运行得很好,但它永远不会退出这个循环……您不会想将它放入任何onCreate、onRestart和onStart方法中,因为它们都会带来相同的问题:您永远不会退出这些方法,因此回调永远不会发生。这是正确的答案。这是安卓的方式,允许你几乎立即获得新数据。这是一个很好的尝试。您是否在真实设备或模拟器@Nils上进行了测试?