当前位置: 首页 > 知识库问答 >
问题:

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

籍英叡
2023-03-14

我正在开发一个应用程序,该应用程序需要每2分钟保存一次设备GPS位置的跟踪。
第一次尝试是使用请求位置更新:

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

为了进行测试,我使用三星银河迷你(Android2.3.5)。
如果我在连接USB电缆的情况下在调试模式下进行测试,一切都很完美,每两分钟我就会得到这个位置。
问题是当我拔下USB并走到街上进行测试时。这样,我每秒都会获得一个GPS位置。这太过分了。
经过多次审查我的代码,我决定使用计时器:

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


如果我出去测试,如果应用程序在前台,一切都很顺利,如果应用程序在后台,TimerTask不会每2分钟运行一次,它就会停止,当应用程序返回前台时,它会突然一直正常运行。但是一切都很快在大约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次运行一次,但是当应用程序在后台时,使用处理程序运行不会每2分钟运行一次,永远不会运行。

我将只使用requestLocationUpdates,但每秒调用一次。< br >我需要你的帮助。谢谢你。

共有1个答案

曹光霁
2023-03-14

如果您查看位置管理器.request位置更新的文档,您会发现 minTime 参数仅用作提示。真正的位置提供程序可以比您指定的更早提供更新。我建议您也设置最小距离值。将其设置为至少 100m。

 类似资料:
  • 嗨,我从以下网站获得了倒计时代码: https://codepen.io/SitePoint/pen/MwNPVq, 并已修改为: 我所做的更改是,我检查了分钟和秒是否都为0,然后变量“deadline”应该用新时间更新。倒计时计时器工作正常,但当它达到0:0时,它进入该功能,一切停止。

  • 我正在为中国开发一个需要GPS位置跟踪的android应用程序。对于位置跟踪,android需要访问Google play服务。但Google play服务在中国被屏蔽。 这个问题有解决办法吗?有没有推荐的第三方库或实现? 谢谢

  • 问题内容: 我在Django中的应用程序 可以 创建一些 非常大的SQL查询。我目前使用一个对象,作为我需要的数据,然后使用一个,以返回要显示给用户的内容。 显然,我可以让用户等待一分钟,同时正在执行这些许多查询集并从数据库中提取查询,然后返回此单一HTML页面。 理想情况下,我想在需要时更新页面,例如: 这可能吗? 问题答案: 我最近发现HttpResponse可以是生成器: 这将逐步将结果返回

  • 问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00:

  • 问题内容: 我正在Go中为Linux编写一个ShareX克隆,该克隆通过http POST请求将文件和图像上传到文件共享服务。 我目前正在使用http.Client和Do()发送请求,但我希望能够跟踪较大文件的上传进度,这些文件最多需要一分钟的时间来上传。目前,我能想到的唯一方法是手动在端口80上打开与网站的TCP连接,并以块的形式写入HTTP请求,但我不知道它是否可以在https网站上使用,我不

  • 问题内容: 我正在尝试每1分钟显示一次味精!不停!我发现一个示例,它在固定延迟后仅显示一次味精!你能帮忙设置吗?或者如果使用计时器更好,我需要一个例子!! 谢谢! 问题答案: 试试这个代码-