代码之家  ›  专栏  ›  技术社区  ›  NickT

为什么位置更改时会覆盖位置管理器的最小更新时间?

  •  0
  • NickT  · 技术社区  · 14 年前

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

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

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

    下面是系统日志消息的捕获。你可以看到我把周期设置为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 回复  |  直到 14 年前
        1
  •  0
  •   blindstuff    14 年前

    首先,android GPS和模拟器一起使用真的充满了bug,如果涉及到在行为不一致时使用GPS,我会用一个真正的手机尝试所有的ap。

    摘自Android参考:

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

    最小时间 通知的最小时间间隔(毫秒)。此字段仅用作 提示保存电源,位置更新之间的实际时间可能大于或小于此值。

    long updateMillis = confData.getMapUpdatePeriod() * 1000;
    

    我猜这只是一个返回常数的东西?还是android的方法?为什么不把它设置为60000或者手动设置?