每2分钟GPS跟踪(requestLocationUpdates,Timer或Handler)

时间:2012-06-11 14:37:01

标签: android timer gps handler

我正在开发一个应用程序,需要每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位置。这太过分了 在仔细检查了我的代码后,我决定使用Timer:

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次执行一次,但是当应用程序处于后台时按顺序运行Runnable处理程序不会每2分钟运行一次,从不运行。

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

1 个答案:

答案 0 :(得分:0)

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