我们可以每秒重复进行一次wifiscanresults吗?

时间:2018-04-20 08:48:38

标签: android

我正在尝试使用wifimanger类扫描所有可见的wifi AP。我的问题是,当(wifiscan-results)使用递归(Runnable)服务每5秒重复调用一次时,我的代码运行良好。但是当时间减少到1秒或更短时间,这样我每1秒注册一次(wifimanger.statrscan)来接收(wifiscan-results)每1秒,输出给出null并且至少每4秒给出一次值。你能告诉我为什么会这样吗?我的目标是每隔一秒或更短时间扫描所有可见的无线AP,这是否可能?

Runnable功能代码:

public void Running() {     
new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    tv1.setText("counter :   " + time1);
                    time1++;
                    Scan_number++;
                    mwifiManager.startScan();
                    periodic_recieving_wifi_signals();
                    Running();
                }
            }, 1000);}

broadcastreciever code:

 public void periodic_recieving_wifi_signals() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION);

    } else {
        //flag1 = false;

        registerReceiver(new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {

                //tv2.setText("Each scan period is   : " + results);
                results = mwifiManager.getScanResults();
                size = results.size();// number of the elements in the list


            }
        }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

    }}

1 个答案:

答案 0 :(得分:0)

你几乎肯定不能每秒进行一次WiFi扫描......这个过程只需要太长时间。

我不知道所有的技术细节,虽然一些具体的细节可能会根据你使用的WiFi版本而有所不同,看Wi-Fi / WLAN Channels, Frequencies, Bands & Bandwidths我们可以看到基本的2.4GHz 802.11 WiFi有14个定义的频道和5GHz WiFi有25个频道(并非所有地点都允许所有频道)。

要执行扫描,手机中的收音机必须依次调谐到每个频道以查看“那里有什么”。看到特定频道上的内容(如果有的话)将涉及消息的交换,并且将花费有限的时间 1 (它必须等待“足够长的时间” “告诉缓慢响应设备和”没有任何东西“之间的区别。)

正如您在评论中指出的那样,如果所有这些都需要4秒左右,那么您将无法以每五秒一次的速度执行扫描。

1 感谢John Hanley提供了一些号码。默认情况下,接入点每隔102.4毫秒发送一次“我在这里”信标。因此,一些最小扫描时间是:

  • 2.4GHz:14 x 102.4ms = 1,433ms

  • 5GHz:25 x 102.4ms = 2,560ms

(根据允许使用的数量或频道,某些位置的两个数字可能会略微减少。)

在实际操作中,您希望在每个频道上收听的时间超过102.4毫秒,否则当您将切换到频道时,您可能会面临无法获得信标的风险,并且然后在发送下一个信标之前(或之前)从那个频道切换。无线电可能会有一个小的延迟,以稳定到每个新的频率。

本文:来自Revolution WiFi网站的"SSID Overhead Calculator"(以及确认102.4ms数字)也显示了拥有太多接入点(AP)和/或太多SSID的危险......在发送这些“信标”帧所花费的时间之前,不会占用很多,这会占用WiFi吞吐量的很大一部分。例如:一个AP上的4个SSID(或同一信道上的4个单SSID AP,或同一信道上的2个双SSID AP)将使用该信道的大约八分之一的通话时间,仅使用“我在这里”信标!