0

我正在开发一个应用程序,该应用程序需要每 2 分钟保存一次设备 GPS 位置的轨迹。
第一次尝试是使用requestLocationUpdates

locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 120000L, 0f, this);

对于测试,我使用Samsung Galaxy Mini (Android 2.3.5)
如果我在调试模式下连接 USB 电缆进行测试,一切正常,每两分钟我就会得到位置。
问题是当我拔下 USB 并去街上测试时。这样我每秒都会得到一个 GPS 位置。这太多了。
经过大量审查我的代码后,我决定使用计时器:

new Timer().scheduleAtFixedRate(new TimerTask(){
    @Override
    public void run() {
        Location loc=getLastBestLocation(Activity.this);
        GpsStore.save(loc);
    }   
}, 120000L, 120000L);

同样,如果使用 USB 电缆在调试模式下测试应用程序,一切正常。
如果我出去测试应用程序是否在前台一切顺利,如果应用程序在后台 TimerTask 不是每 2 分钟运行一次,它就会停止,当应用程序返回前台时突然运行所有时间TimerTask 它已正常执行。但一切都在大约 1 秒内迅速完成。

再次审查我的代码后,我决定使用而不是 Timer Handler:

        final Handler handler = new Handler();
        Runnable runnable = new Runnable() {
           public void run() {
                                    Location loc=getLastBestLocation(Activity.this);
                                    GpsStore.save(loc);

                handler.removeCallbacks(this);
                handler.postDelayed(this,120000L);
           }
        };
        handler.removeCallbacks(runnable);
        handler.postDelayed(runnable, 120000L);

与往常一样,在使用 USB 的调试模式下一切正常。现在当我在街上进行测试时发生的情况是,当应用程序在前台被处理程序不完全每 2 分钟运行一次时,有时每隔 4 次在 1 中执行一次,但是当应用程序在后台运行时使用处理程序不是每 2 分钟运行一次,从不运行。

我会使用 requestLocationUpdates 但每秒调用一次。
我需要你的帮助。谢谢你。

4

1 回答 1

0

如果您查看 的文档locationManager.requestLocationUpdates,您会发现该minTime参数仅作为提示。真正的 LocationProvider 可以比您指定的更快地提供更新。我建议您也设置该minDistance值。将其设置为至少 100m。

于 2012-06-11T16:21:01.283 回答