每 2 分钟跟踪一次 GPS (请求位置更新、计时器或处理程序)



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

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

为了进行测试,我使用三星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 秒内很快。

再次审查了我的代码后,我决定使用计时器处理程序代替:

        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 次运行一次,但是当应用程序在后台运行时 使用 Handler 运行一次不会每 2 分钟运行一次, 从不运行。

我只会使用请求位置更新,但每秒都会调用一次。
我需要你的帮助。谢谢。

如果您查看 locationManager.requestLocationUpdates 的文档,您会发现 minTime 参数仅被视为提示。 真正的位置提供商可以比您指定的更早提供更新。 我建议您也设置minDistance值。 将其设置为至少 100 米。

最新更新