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
提交
取消