我正在编写一个android应用程序,其目的是通过wifi指纹确定用户的位置,为了做到这一点,我需要得到真正频繁的(尽可能频繁)扫描当前的网络,但我发现时间限制,这样做。
事实上,无论如何,我可以得到一个新的扫描大约每秒,我想知道是否有一种方法可以加快速度。
过去关于这个话题的问题(比如这个Android, wifi主动扫描)并不是真的有用。
代码如下:
public class WiFiScanReceiver extends BroadcastReceiver {
private static final String TAG = "WiFiScanReceiver";
private Main parent;
private ScanResult storedBest;
private String actualFileName;
private int nOfScans;
private long initialTime;
private FileSaver fs;
public WiFiScanReceiver(Main wifiDemo) {
super();
this.parent = wifiDemo;
storedBest = null;
actualFileName ="";
nOfScans = 0;
fs = new FileSaver(parent);
}
@Override
public void onReceive(Context c, Intent intent) {
List<ScanResult> results = parent.getWifiManager().getScanResults();
ScanResult bestSignal = null;
if(parent.isRecording()&& actualFileName!=""){
//Getting the fingerprint
}
if (parent.isRecording()) nOfScans ++;
parent.getWifiManager().startScan();
Log.d(TAG, "onReceive() message: " + message);
}
//VARIOUS GETTERs AND SETTERs
}
每单位时间可以进行多少次扫描是有限制的。接入点大约每100毫秒广播一个信标,所以这是您需要等待的时间,以确保检测到它。有12个频率通道,所以你必须花费至少100ms*12 = 1.2s,以确保你有所有的接入点。
我也尝试通过wifi指纹来确定用户的位置。
在我的设备(Galaxy S2)上,我可以每6秒获得一个扫描结果。我用的是主动扫描,但是两次wifi扫描的间隔没有变化。但在我朋友的设备(HTC Desire)上,我每秒可以得到一个扫描结果。(使用相同代码)
我认为扫描速度取决于设备。
如果你能经常得到扫描结果,请告诉我。
此代码可以通过WIFI + GPS(单独使用GPS很慢)找到位置:
使用Wifi时查找当前位置有效,但使用GPS时失败
但另一方面,你可以考虑这里列出的其他选项:
Android:如何通过编程方式获取当前位置