比 WifiManager startScan() 更快的 WiFi 扫描替代方案?

TL;DR 版本

我需要每秒多次扫描并获取附近接入点的 BSSID/MAC 地址和信号电平。WifiManager.startScan() 扫描大约 3.5 秒,这有点慢。(对于其他人来说比 6 秒要好,但对我来说仍然太慢了)。我正在寻找一种每 200 毫秒或更短时间获得结果的方法。


更详细的版本。

我正在尝试构建一个使用 WiFi 信号而不是 GPS 的位置查找应用程序。到目前为止一切顺利,除了我需要获取大量数据才能获得准确和一致的结果。


我需要从我能找到的每个接入点获取 BSSID 和信号电平,然后存储这些数据以备后用。我已经尝试使用 WifiManager 和 BroadcastReceiver 来扫描并获取扫描结果。他们的问题是他们真的很慢。单次扫描至少需要 3 秒。在 3 秒内信号电平值会发生变化,导致结果不准确。我还需要进行数千次扫描,这将花费大量时间。到目前为止,我还没有找到替代方案。我的手机目前运行的是 Android 8.0.0


也许如果我优化我的代码扫描会执行得更快?


onCreate 方法:


@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_sensor);


        btnMainActivity = (Button) findViewById(R.id.button_ToMainActivity);

        btnGetWifiInfo = (Button) findViewById(R.id.button_GetWifiInfo);

        textWifiInfo = findViewById(R.id.textView_wifiInfo);

        textWifiNr = findViewById(R.id.textView_wifiNr);


        mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

        mWifiReceiver = new BroadcastReceiver() {

            @Override

            public void onReceive(Context c, Intent intent) {

                getScanResultInfo();                   

                timeDifference = SystemClock.elapsedRealtime() - startTime;

                textWifiInfo.setText("Seconds elapsed: "+Double.toString(timeDifference /1000.0));

                nrOfScans++;

                if (nrOfScans < 10){

                    mWifiManager.startScan();

                }

            }

        };


        getWifiInfo();

        toMainActivity();


    }


public void getScanResultInfo(){

    int level;

    List<ScanResult> wifiScanList = mWifiManager.getScanResults();

    textWifiNr.setText("Nr of detected APs: "+ wifiScanList.size());

    for (ScanResult scanResult : wifiScanList) {

        level = WifiManager.calculateSignalLevel(scanResult.level, 5);

        Log.d("WIFI","Level is " + level + " out of 5 " + scanResult.level + " on " + scanResult.BSSID + "  ");            

    }

}

提前感谢您的时间!


慕丝7291255
浏览 541回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java