我试图通过LocationManager建立一个快速和肮脏的GPS查找,它每半秒获取一个网络位置(500米内)10秒。换句话说,我只是想找到正确的粗标准设置和正确的逻辑,在我的Handler线程中没有更好的位置10秒后停止检查。
我认为我的主循环应该看起来像这样:
/**
* Iteration step time.
*/
private static final int ITERATION_TIMEOUT_STEP = 500; //half-sec intervals
public void run(){
boolean stop = false;
counts++;
if(DEBUG){
Log.d(TAG, "counts=" + counts);
}
//if timeout (10 secs) exceeded, stop tying
if(counts > 20){
stop = true;
}
//location from my listener
if(bestLocation != null){
//remove all network and handler callbacks
} else {
if(!stop){
handler.postDelayed(this, ITERATION_TIMEOUT_STEP);
} else {
//remove callbacks
}
}
}
我想知道的是,在我获取最后一个已知位置作为我的初始最佳位置并启动我的线程之后,我如何设置粗标准,以便我收到一个比初始更准确的标准(为了比较两个新鲜度),这通常与我当前的位置截然不同?
那么,您正在寻找的是向设备询问获取粗略位置的最佳标准。
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE); // Faster, no GPS fix.
String provider = locationManager.getBestProvider(criteria, true); // only retrieve enabled providers.
然后注册一个监听器
locationManager.requestLocationUpdates(provider, ITERATION_TIMEOUT_STEP, MIN_LOCATION_UPDATE_DISTANCE, listener); //listener just implements android.location.LocationListener
在侦听器中,您接收到这样的更新
void onLocationChanged(Location location) {
accuracy = location.getAccuracy(); //accuracy of the fix in meters
timestamp = location.getTime(); //basically what you get from System.currentTimeMillis()
}
在这一点上,我的建议是完全基于准确性排序,因为你不能在10秒内改变你的位置那么多,而粗糙的位置更新在准确性上差异很大。
我希望这对你有帮助。