我正在编写一个代码,用于连续获取该范围内所有接入点的信息。
这是我的代码:
myRunnable = new Runnable() {
@Override public void run() {
while(){
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.startScan();
List<ScanResult>results= wifi.getScanResults();
try{
//data Logging
}
}
}
};
myThread = new Thread(myRunnable);
myThread.start();
由于反复连续扫描和记录数据,我想在记录数据之前检查扫描是否完成。 在记录数据之前,是否有任何标志或函数检查wifi.startScan()是否完成。 你能帮我解决一下代码吗?
答案 0 :(得分:4)
我想在记录数据之前检查扫描是否完成。是 有任何标志或函数检查wifi.startScan()是 在记录数据之前是否完成。请你帮助我好吗 带代码。
是的,为此目的指定了机制。要实现目标,您需要实施BroadcastReceiver
来监听WiFi
次扫描。
您需要的只是使用适当的BroadcastReceiver
创建IntentFilter
。所以你需要这个过滤的动作:
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
此操作表示已完成接入点扫描,并且结果可用。然后只需创建BroadcastReceiver
(静态或动态,无关紧要)。
如果您不知道如何开始,请查看本教程:
答案 1 :(得分:1)
您需要实施BroadcastReceiver
监听WifiManager.startScan()
返回的扫描结果。 onReceive()
允许您直接访问扫描结果。扫描完成大约需要1秒钟并触发onReceive()
...
答案 2 :(得分:1)
为了建立上面的答案,我只想添加相关代码来举例。
<强> 1。注册活动
// don't forget to set permission to manifest
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
//check if WIFI is enabled and whether scanning launched
if(!wifiManager.isWifiEnabled() || !wifiManager.startScan())
{
throw new Exception("WIFI is not enabled");
}
<强> 2。收到结果
要接收,注册的对象(在本例中为this)需要扩展BroadcastReceiver
并实现以下方法:
public void onReceive(Context context, Intent intent) {
List<ScanResult> result = wifiManager.getScanResults();
}