为什么位置更改时,位置管理员的最短更新时间会被覆盖?

时间:2010-10-26 22:50:07

标签: android location

我正在使用Eclipse 3.5开发一个地图应用程序。

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

当我实际从DDMS仿真器控件发送新位置并且地图视图上的位置发生变化时,我看到系统进程然后将最小时间设置为零。

下面是系统日志消息的捕获。您可以看到我将周期设置为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()
    private void enableGPS() {

    if (confData.getTrackMode() == AppConstants.GPS_ON) {
        if (lm == null)
            lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        long updateMillis = confData.getMapUpdatePeriod() * 1000;
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                updateMillis, confData.getMapMinResendDistance(), this);
    }

}

和听众是

    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();
}

1 个答案:

答案 0 :(得分:0)

首先,使用模拟器的机器人GPS实际上充满了错误,如果涉及使用GPS时,我会尝试使用真正的手机进行所有操作。

取自Android参考:

public void requestLocationUpdates(String provider,long minTime,float minDistance,PendingIntent intent)

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

编辑,我在你的代码中看到了这个:

long updateMillis = confData.getMapUpdatePeriod() * 1000;

我猜这只是一个返回常数的东西?或者它是一个Android方法?为什么不直接将它设置为60000左右呢?