Android 为什么是位置管理器';位置更改时是否覆盖了s的最短更新时间?

Android 为什么是位置管理器';位置更改时是否覆盖了s的最短更新时间?,android,location,Android,Location,我正在使用Eclipse3.5开发一个映射应用程序 我正在通过配置活动使用LocationManager的requestLocationUpdates方法设置最短更新周期。当我设置属性时,我在Logcat中看到系统进程将值设置为OK 当我实际从DDMS emulator控件发送一个新位置,并且位置在map视图上发生更改时,我看到系统进程随后将最短时间设置为零 下面是系统日志消息的捕获。你可以看到,我将周期设置为32秒,然后是16秒,然后,在我发送模拟位置更改后,系统将其设置为零 地图会对位置变化

我正在使用Eclipse3.5开发一个映射应用程序

我正在通过配置活动使用LocationManager的requestLocationUpdates方法设置最短更新周期。当我设置属性时,我在Logcat中看到系统进程将值设置为OK

当我实际从DDMS emulator控件发送一个新位置,并且位置在map视图上发生更改时,我看到系统进程随后将最短时间设置为零

下面是系统日志消息的捕获。你可以看到,我将周期设置为32秒,然后是16秒,然后,在我发送模拟位置更改后,系统将其设置为零

地图会对位置变化做出即时响应,即使它们只相隔几秒钟发送

有人知道为什么我的最短时间被系统覆盖了吗

10-26 22:21:09.770: DEBUG/GpsLocationProvider(54): setMinTime 32000
10-26 22:21:53.011: DEBUG/GpsLocationProvider(54): stopNavigating
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): setMinTime 16000
10-26 22:21:57.810: DEBUG/GpsLocationProvider(54): startNavigating
10-26 22:21:57.900: DEBUG/GpsLocationProvider(54): setMinTime 16000
10-26 22:22:39.099: DEBUG/GpsLocationProvider(54): TTFF: 41290
10-26 22:22:39.350: DEBUG/GpsLocationProvider(54): setMinTime 0
10-26 22:22:51.740: DEBUG/GpsLocationProvider(54): TTFF: 53925
10-26 22:22:51.820: DEBUG/GpsLocationProvider(54): setMinTime 0
10-26 22:22:56.780: DEBUG/GpsLocationProvider(54): TTFF: 58967
10-26 22:22:56.879: DEBUG/GpsLocationProvider(54): setMinTime 0
下面的相关代码,在onResume()中调用了enableGPS()

而听众是

    public void onLocationChanged(Location location) {

    List<Overlay> overlays = mv.getOverlays();
    lo = new MyLocationOverlay(this, mv);
    overlays.add(lo);
    lo.enableMyLocation();
    int lat = (int) (location.getLatitude() * 1E6);
    int lng = (int) (location.getLongitude() * 1E6);
    GeoPoint point = new GeoPoint(lat, lng);
    mc.setCenter(point);
    mv.invalidate();
}
public void onLocation已更改(位置){
列表覆盖=mv.getOverlays();
lo=新的MyLocationOverlay(本,mv);
叠加。添加(lo);
lo.enableMyLocation();
intlat=(int)(location.getLatitude()*1E6);
int lng=(int)(location.getLongitude()*1E6);
地质点=新的地质点(纬度、液化天然气);
mc.设置中心(点);
mv.invalidate();
}

首先,android GPS与emulator的配合使用确实充满了漏洞,如果涉及到在行为不一致时使用GPS,我会用一部真正的手机尝试所有AP

摘自Android参考资料:

public void requestLocationUpdates(字符串提供程序、long-minTime、float-minDistance、pendingent-intent)

minTime通知的最小时间间隔,以毫秒为单位。此字段仅用作节省电源的提示,位置更新之间的实际时间可能大于或小于此值。

编辑,我在您的代码中看到:

long updateMillis = confData.getMapUpdatePeriod() * 1000;

我猜这只是一个返回常数的东西?还是android的方法?为什么不手动将其设置为60000或类似的值?

我看到了这一点,知道这只是一个提示。它似乎接受了这个暗示,直到位置真正改变。我似乎记得,在过去的某个时候,这在emulator中确实起作用,即在最短时间之前发送的更新被忽略。但我无法证明这一点,我也不打算回滚SDK/插件版本。我确实同意你的观点,它是有缺陷的——它甚至无法传递正在发送的模拟位置,而不会引入显著的舍入错误!在我的回答中添加了一些内容。如果你知道怎么做,把手机挂在笔记本电脑上,四处看看DDM,测试时把最小距离设置为0,看看它被调用的频率,至少你可以决定这是一个真正的问题还是一个模拟器的问题。我已经试着对它进行了编码,这没有什么区别。我记录这个值只是为了确保它不是零。该值来自已保存的首选项,并且是用户可配置的。我实际上没有手机,所以在我把apk发送给一个有手机的朋友之前,我正在尝试制定一个省电方案。我不想马上把他的电池弄平!
long updateMillis = confData.getMapUpdatePeriod() * 1000;