我正试着从两个不同的提供商那里获取位置:网络和GPS。
我在requestLocationUpdates中使用minTime 1分钟和minDistance 300米。有了这些参数,我不希望每分钟(每个提供商)获得超过一个更新。问题是,我获得更新的频率比这更高(每分钟超过1次)。为什么?
以下是一些用于演示的代码:
mLocationManager.removeUpdates(listener);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TEN_SECONDS*6, TEN_METERS*30, listener);
if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TEN_SECONDS*6, TEN_METERS*30, listener);下面是监听程序:
private final LocationListener listener = new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
if(location.getProvider().equals(LocationManager.NETWORK_PROVIDER))
updateUILocation(location,LocationService.this.gpsLocation);
else
updateUILocation(LocationService.this.networkLocation, location);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};UpdateUILocation:
private void updateUILocation(Location networkLocation,Location gpsLocation)
{
Location location = null;
if(gpsLocation == null || gpsLocation.getAccuracy() > 800)
{
if(!(networkLocation == null || networkLocation.getAccuracy() > 800))
location = networkLocation;
}
else
if(networkLocation == null)
{
if(gpsLocation.getAccuracy() < 800)
location = gpsLocation;
}
else
if(gpsLocation.getAccuracy() < networkLocation.getAccuracy() && gpsLocation.getAccuracy() < 500)
location = gpsLocation;
else
if(networkLocation.getAccuracy() < 800)
location = networkLocation;
if(location!=null)
{
if (mGeocoderAvailable)
doReverseGeocoding(location);
}
// Bypass reverse-geocoding only if the Geocoder service is available on the device.
}doReverseGeocoding将位置转换为文本并调用处理程序:
mHandler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what == UPDATE_ADDRESS) // msg.what == 1
{
LocationService.this.address = (String) msg.obj;
new SendLocation(LocationService.this.id,(String)msg.obj); //send the location to the db
LocationService.this.gpsLocation = null; //reset gps value
LocationService.this.networkLocation = null; //reset network value
}
}
};我在开车时测试了这个应用程序(这意味着minDistance参数不是一个因素),我每分钟收到超过1个位置更新。
以下是我在测试时收到的位置(请忽略这些位置,因为它是希伯来语,只需查找时间):http://imrip.interhost.co.il/
发布于 2013-01-20 03:01:20
“minTime是1分钟,minDistance是300米。使用这些参数,我永远不会在少于1分钟的时间内获得2个位置……”
这根本不是真的,至少不是果冻之前的样子。
http://developer.android.com/reference/android/location/LocationManager.html
在
之前,minTime参数只是一个提示,一些位置提供程序实现忽略了它。对于与安卓兼容的设备来说,从Jellybean开始,必须同时遵守minTime和minDistance参数。
Pre-JB你可以得到比你的最小时间指定更频繁的更新,特别是如果GPS接收是粗略的。有关更多详细信息,请参阅此答案:
https://stackoverflow.com/questions/14415607
复制相似问题