我只想在调用startScan()
时获得WiFi扫描的结果,但我得到的结果是,即使我只调用startScan()
一次,结果也会不断变化。我的观点是,我只想在调用startScan()
时更新扫描结果。
我读到WIFI_MODE_SCAN_ONLY
,它说
在此Wi-Fi锁定模式下,Wi-Fi将保持活动状态,但仅限于此 将支持的操作是启动扫描,以及 随后报告扫描结果。不会有任何尝试 自动连接到记住的接入点,也不会定期 自动执行扫描以查找记住的访问点。 在此模式下,应用程序必须明确请求扫描。
除非我打电话给startScan()
,否则我不想定期扫描,但我不知道是否设置了我试图通过这种方式的标志
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
非常感谢任何帮助,我一直在努力解决这个问题。
答案 0 :(得分:3)
我认为OP已找到一些解决方案或解决方法。如果不是,并且对于其他任何人(像我一样)寻找一个简单的解决方案,这就是我所做的:
声明一个全局变量: Boolean singleScanMode = false;
创建方法并在需要扫描可用AP时调用它:
public void scanAps(){
WifiManager tempWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// set singleScanMode = true so you can collect scan data
singleScanMode = true;
// add intent filters to enable auto scan
IntentFilter i = new IntentFilter();
i.addAction(tempWifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//ignore scan results unless singleScanMode is set to
if (singleScanMode) {
List<ScanResult> results = tempWifiManager.getScanResults();
Iterator<ScanResult> iterator = results.iterator();
Toast.makeText(context, "Total APs found: "
+ results.size(), Toast.LENGTH_SHORT).show();
while (iterator.hasNext()) {
ScanResult next = iterator.next();
final String bssid = next.BSSID; // MAC address
final String ssid = next.SSID; // AP name
final int rssi = next.level; // Received Signal Strength Indicator
// do anything else you want
} // end while
//set it back to false
singleScanMode = false;
} //end if
}, i);
tempWifiManager.startScan();
}
请注意,只要活动正在运行,只要扫描了wifi,Android就会向您报告活动。但这样你只需忽略扫描结果。如果其他人有更好的主意,请分享。希望它有所帮助!