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 + " "); }}提前感谢您的时间!
添加回答
举报
0/150
提交
取消