我正在为Android创建自定义Phonegap插件,该插件在应用程序位于前台和后台时监控位置。关于使用FusedLocationProviderAPI的Google文档非常清楚。到目前为止我已经制定的过程如下
确保API可用
GoogleApiAvailability api = GoogleApiAvailability.getInstance();
int code = api.isGooglePlayServicesAvailable(ctxt);
return (code == ConnectionResult.SUCCESS);
使用指定的回调定义LocationListener,以处理requestLocationUpdates
方法撤消的结果。
这是事情变得有些不清楚的地方
setInterval
- 应用想要更新位置的时间间隔setFastestInterval
- 消耗更新的时间间隔(如果可用)。setSmallestDistance
& setPriorty
- 足够清楚setNumUpdates
- 我的工作原理并不清楚。在线之间阅读我假设如果我使用setInterval(60000)
和setNumUpdates(1000)
,系统将继续发送下一个6000分钟的位置更新,或直到应用程序后台/关闭或I /用户取消位置更新。但是这引出了一个问题 - 应用程序需要做些什么来成为一个好公民。我假设必须是这样的
PendingResult
来电所返回的requestLocationUpdates
。PendingResultt.cancel()
如果有人可以对此工作流程的正确性发表评论,我将非常感激。
相关问题 - PendingResult
州的documentation
调用者或回调接收者有责任释放与返回结果相关的任何资源。
我不清楚他们在这里谈论的资源是什么。 LocationListener.onLocationChanged
事件返回一个Location对象,我认为该对象在超出范围时将被垃圾收集。据推测,PendingResult
返回的requestLocationUpdates
应该被取消,然后在应用程序进入后台时设置为null。通过释放资源还有什么需要做的吗?
几个小时后
我创建了两个版本的测试应用
setNumUpdates(10000)
设置LocationRequest。以应用1:位置为... setNumUpdates(1)
设置LocationRequest。以 App 2`的形式弹出位置变化的祝酒词:位置是...... 我让这两个应用程序同时运行,并在一个名为FakeGPS的非常简洁的小应用程序的帮助下模拟了位置变化。当我第一次进行假位置更改时,App1和App2都为我提供了更新。但是,所有后续位置更改仅由App 1报告。
通过推理,setNumUpdates
提供了定期轮询更新的机制。令人困惑的是,即使在应用程序背景之后更新仍在继续 - 尽管我认为这很大程度上是因为它受到操作系统的支配,在它认为合适的情况下将会杀死它。
然而,以上所有都是基于经验测试。我在setNumUpdates
设置上发现很少见。
答案 0 :(得分:1)
对于您的问题,即使应用处于后台,更新仍会继续: Ans:在任何情况下,setNumUpdates都是1或x,当你的应用程序处于后台并且仍然注册更新时,除非操作系统已杀死你的应用程序,否则你将获得更新内存。 setNumUpdates唯一的区别是,正如您所说的那样,如果设置为1,它将只提供一次更新,除非您再次重新注册。 Link有足够的setNumUpdates定义 https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#public-methods