我正在尝试使用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));
}}
答案 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)将使用该信道的大约八分之一的通话时间,仅使用“我在这里”信标!