Android上的定期前景位置跟踪

Dro*_*dOS 5 android fusedlocationproviderapi

我正在为Android创建自定义Phonegap插件,该插件在应用程序处于前台和后台时都会监控位置.关于使用FusedLocationProviderAPI的 Google文档非常清楚.到目前为止我已经制定的过程如下

  • 确保API可用

    GoogleApiAvailability api = GoogleApiAvailability.getInstance();
    int code = api.isGooglePlayServicesAvailable(ctxt);
    return (code == ConnectionResult.SUCCESS); 
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用指定的回调定义LocationListener,以处理方法重新生成的结果requestLocationUpdates.

  • 创建LocationRequest

事情变得有点不清楚

  1. setInterval - 应用程序希望位置更新的时间间隔
  2. setFastestInterval - 消耗更新的时间间隔(如果可用).
  3. setSmallestDistance&setPriorty- 足够清楚
  4. setNumUpdates - 我的工作原理并不清楚.在线之间阅读我假设如果我使用setInterval(60000)并且setNumUpdates(1000)系统将在接下来的6000分钟内继续发回位置更新,或者直到应用程序后台/关闭或我/用户取消位置更新.

但这就引出了一个问题 - 应用程序需要做些什么来成为一个好公民.我假设必须是这样的

  • 记录通话PendingResult 返回的内容requestLocationUpdates.
  • 检测onPause事件发生的时间
  • PendingResultt.cancel()在让应用程序进入后台之前调用

如果有人可以评论这个工作流程的正确性,我会非常感激.

一个相关的问题-该文档PendingResult状态

调用者或回调接收者有责任释放与返回结果相关的任何资源.

我不清楚他们在这里谈论的资源是什么.该LocationListener.onLocationChanged事件返回一个Location对象,我认为该对象在超出范围时将被垃圾收集.据推测,PendingResult返回的requestLocationUpdates应该被取消,然后当应用程序进入后台时设置为null.通过释放资源还有什么需要做的吗?


几个小时之后

我创建了两个版本的测试应用程序

  • 应用1:使用设置LocationRequest setNumUpdates(10000).以App 1的形式弹出位置变化的祝酒词:位置是......
  • 应用2:使用设置LocationRequest setNumUpdates(1).以App 2`的形式弹出位置变化的祝酒词:位置是......

我让两个应用程序同时运行,并在一个名为FakeGPS的非常简洁的小应用程序的帮助下模拟了位置变化.当我第一次进行假位置更改时,App1和App2都为我提供了更新.但是,所有后续位置更改仅由App 1报告.

通过推理,然后setNumUpdates提供定期轮询更新的机制.令人困惑的是,即使在应用程序背景之后更新仍在继续 - 尽管我认为这很大程度上是因为它受操作系统的支配,在它认为合适的时候会杀死它.

但是,以上所有都是基于经验测试.我发现setNumUpdates设置上的惊喜很少.

Ash*_*wat 1

对于您的问题,即使应用程序处于后台,更新也会继续吗:答:无论 setNumUpdates 是 1 还是 x,当您的应用程序处于后台并且仍然注册更新时,您都会获得更新,除非操作系统已更新为了内存,杀死了你的应用程序。setNumUpdates 唯一的区别是,正如您所说,如果将其设置为 1,它将仅提供一次更新,除非您再次重新注册。链接对 setNumUpdates 有足够的定义 https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#public-methods