Android WIFI扫描时延

希望大家能够给个评论,支持下新人,感激不尽。

本文第一篇CSDN博客,欢迎大家关注,如有错误,欢迎批评指正。

本人在做WIFI室内定位时发现Android扫描WIFI的时延不小。在此先附上我扫描wifi的代码,然后分析扫描时延和原因。

package com.upc.xin.rssi.methods;

import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import com.upc.xin.rssi.data.DataRepertory;
import java.util.List;
import android.os.Handler;

/**
 * Created by xin on 2017/11/27.
 */
//wifi扫描线程
public class RssiScanfer extends Thread {
    private WifiManager wifiManager;
    private WifiInfo wifiInfo;
    private List<ScanResult> wifiList;
    private Boolean Flag = true;
    private Handler ui_Handler;

    /*构造函数,获取activity的context和UI刷新handler*/
    public RssiScanfer(Context context, Handler handler) {
        Flag = true;
        wifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        wifiInfo = wifiManager.getConnectionInfo();
        ui_Handler = handler;
    }
    /*扫面wifi进程,每1秒扫一次*/
    public void run() {
        while (Flag) {
            wifiManager.startScan();
            wifiList = wifiManager.getScanResults();
            String txtContent = "";
            DataRepertory.infoString = "info:时间-" + FunctionMethods.GetTime() + "," + DataRepertory.FilePath + "\r\n";
            for (ScanResult sr : wifiList) {
                DataRepertory.infoString += sr.BSSID + "," + sr.frequency + "," + sr.level + "\r\n";
                txtContent += sr.BSSID + "," + sr.frequency + "," + sr.level + "\r\n";
            }
            txtContent += "%\r\n";
            FunctionMethods.AddStringIntoText(txtContent, DataRepertory.RssiTextFile);
            try {
                ui_Handler.sendEmptyMessage(0x123);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void Finish() {
        Flag = false;
    }
}

代码中扫描时间间隔为1s。(记得Android 4.0的时候貌似还获取不到WIFI的频率等信息,本人用的小米5x,现在Android7.0就可以获取到频率等更多信息了。)

https://stackoverflow.com/questions/7969174/reducing-delay-between-two-wifi-scans

这是stackoverflow中的一个时延问题,评论有一大神回答的很好。

There is a limit on how many scans you can get per unit of time. An access point broadcasts a beacon roughly every 100 ms, so that is the time you need to wait to be sure to detect it. There are 12 frequency channels so you have to spend at least 100ms*12 = 1.2s in order to be sure that you have all the access points. Anything below that will be inaccurate.(每个单位时间扫描的次数是有限制的,每个接入点即WIFI广播信标周期大约为100毫秒,所以你得等待100毫秒去检测。当有12个个频率信道,你需要花费100ms*12=1.2s的时间去扫描所有接入点。如果扫面周期小于1.2s,则扫描结果是不准确的。)

由于美国和中国的WIFI 信号不同,

美洲(FCC)

2.412 ~ 2.462 GHz:11个信道

5.15 ~ 5.35 GHz,5.725 ~ 5.825 GHz;12个信道

中国

2.412 ~ 2.472 GHz:13个信道

5.725 ~ 5.825 GHz:4个信道

小米5X是支持频段的,所以最小周期应该是100ms*17=1.7s。

本人用小米5x进行下测试,单位秒:3,10,10,6,10,9,13,10,10,12,13。

可见扫描时延不是固定的,但是在10s左右,运气好有可能3秒就会扫描到。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值