【问题标题】:GPS trace every 2 minutes (requestLocationUpdates, Timer or Handler)GPS 每 2 分钟跟踪一次(requestLocationUpdates、Timer 或 Handler)
【发布时间】:2012-06-11 14:37:01
【问题描述】:

我正在开发一个应用程序,该应用程序需要每 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 但每秒都会调用一次。
我需要你的帮助。谢谢。

【问题讨论】:

    标签: android timer gps handler


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我知道minTime 是一个提示。这就是我尝试使用TimerHandler 的原因。我需要具有固定时间间隔的 GPS 坐标。必须始终满足此间隔。我写的间隔是 2 分钟也许 30 分钟,但重要的是间隔准确完成。有时有效有时无效,这一定是不可能的。
    • 我做过类似的事情来记录职位。我只是使用了 AlarmManager 并让它发送一个 PendingIntent 到一个服务组件。无论您的活动是否在前台,都会发生这种情况。
    • 将此评论作为答案。这样人们就会投票(或不投票)作为一个好的答案。关于AlarmManager,谢谢,我会试试你说的。
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多