【问题标题】:Reducing delay between two wifi scans减少两次 wifi 扫描之间的延迟
【发布时间】:2012-11-26 22:09:03
【问题描述】:

我正在编写一个 android 应用程序,其目的是通过 wifi 指纹确定用户位置,为了做到这一点,我需要对当前网络进行非常频繁(尽可能频繁)的扫描,但我发现这样做的时间限制。

事实上,无论如何,我几乎可以每秒进行一次新的扫描,我想知道是否有办法加快速度。

关于该主题的过去问题(因为这个Android, wifi active scans)并没有真正有用。

代码如下:

public class WiFiScanReceiver extends BroadcastReceiver {
    private static final String TAG = "WiFiScanReceiver";
    private Main parent;
    private ScanResult storedBest;
    private String actualFileName;
    private int nOfScans;
    private long initialTime;
    private FileSaver fs;

    public WiFiScanReceiver(Main wifiDemo) {
        super();
        this.parent = wifiDemo;
        storedBest = null;
        actualFileName ="";
        nOfScans = 0;
        fs = new FileSaver(parent);
    }

    @Override
    public void onReceive(Context c, Intent intent) {
        List<ScanResult> results = parent.getWifiManager().getScanResults();
        ScanResult bestSignal = null;
        if(parent.isRecording()&& actualFileName!=""){

        //Getting the fingerprint
        }

        if (parent.isRecording()) nOfScans ++;
        parent.getWifiManager().startScan();
        Log.d(TAG, "onReceive() message: " + message);
    }
    //VARIOUS GETTERs AND SETTERs

}

【问题讨论】:

  • 你是如何获得用户位置的?我们可以看代码吗?
  • 我打算通过将 wifi 指纹 (RSSI + BSSID) 与已知指纹数据库进行比较来获取位置。我将使用这种方法来提高基于设备传感器的定位过程的精度。我现在没有本地化过程的代码。

标签: android android-wifi wifimanager


【解决方案1】:

每单位时间可以进行多少次扫描是有限制的。接入点大约每 100 毫秒广播一次信标,因此您需要等待一段时间才能确保检测到它。有 12 个频道,因此您必须花费至少 100ms*12 = 1.2s 才能确保您拥有所有接入点。低于此值的任何内容都是不准确的。

【讨论】:

    【解决方案2】:

    我还尝试通过 wifi 指纹确定用户位置。

    在我的设备 (Galaxy S2) 上,我每六秒可以获得一个扫描结果。 我使用了主动扫描,但是两次wifi扫描之间的间隔没有变化。 但是在我朋友的设备(HTC Desire)上,我每秒可以得到一个扫描结果。(使用相同的代码)

    我认为扫描速度取决于设备。

    如果你能经常得到扫描结果,请告诉我。

    【讨论】:

    • 我正在开发 HTC Desire HD,我每秒都能得到不同的结果,但我的经验和你一样,表明无法覆盖硬编码的设备最大扫描频率,并且该频率因设备而异。
    【解决方案3】:

    此代码可以通过WIFI + GPS找到位置(仅GPS很慢):

    Finding current location works when using Wifi, but fails when using GPS

    但另一方面,您可以考虑此处列出的其他选项:

    Android : How may ways I can get current location programatically

    【讨论】:

    • 谢谢,但我不能依赖 GPS,因为该系统主要部署在室内。我已经可以使用已知的起始位置和使用卡尔曼滤波器从该位置输出的传感器来估计位置,但它并不像我希望的那样准确。所以我需要将它与wifi指纹集成。我在第一篇文章中添加了接收wifi数据的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2019-03-10
    • 2018-04-10
    相关资源
    最近更新 更多