小编Bog*_*hai的帖子

比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 …
Run Code Online (Sandbox Code Playgroud)

java android wifimanager android-wifi

5
推荐指数
1
解决办法
1010
查看次数

标签 统计

android ×1

android-wifi ×1

java ×1

wifimanager ×1