繁体   English   中英

对Google Maps Location数据使用循环

[英]Using a loop with Google Maps Location data

我正在使用google maps android获取当前位置:

LatLng currentLocation = new LatLng(location.getLatitude(), location.getLongitude());

我将如何构造一个简单的循环,使其仅产生每第4个currentLocation的发言,而不是通过locationManager反馈每个点?

我认为您不应该使用循环来忽略位置更新,而应该仅以希望接收位置的频率请求位置更新,否则设备将利用所有力量来获取位置,而只是忽略它。

您应该使用LocationClient而不是LocationManager有关如何使用LocationClient的信息,请参见以下链接: http: //developer.android.com/training/location/retrieve-current.html http://developer.android.com/reference/com /google/android/gms/location/LocationClient.html#requestLocationUpdates(com.google.android.gms.location.LocationRequest,android.app.PendingIntent

vs LocationManager http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long,float,android.location.Criteria,android.app.PendingIntent

但两者都提供了通过特定频率请求位置更新的方法

requestLocationUpdates()

选项1-正确的一种-限制位置提供者查询

这应该可以在某种程度上优化电池寿命,并且可以使用API​​。

假设您使用LocationManager#requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)获取当前位置,如果将minTime增加四倍,则将有效地接收到第四个位置更新。

选项2-懒惰的人-仅每n秒更新地图

这将允许您处理从位置提供者收到的每个位置,但仅每n秒更新一次地图。

您想跟踪上一次更新地图的时间,并且仅在经过n秒后才更新。

声明:

long lastTime = -1; // no location update yet
final long delta = 15 * 1000; // fifteen seconds apart

在您的onLocationChanged

// common code here, do this for every location received ...
Log.d(TAG, location + "");

// this gets executed only after fifteen seconds
if (location.getTime() > lastTime + delta) {
    // update map here
    lastTime = location.getTime();
}

请注意,这不能确保您每隔15秒就获得一次地图更新。 十五秒过后,您将获得第一次更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM