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.
事情变得有点不清楚
setInterval - 应用程序希望位置更新的时间间隔setFastestInterval - 消耗更新的时间间隔(如果可用).setSmallestDistance&setPriorty- 足够清楚setNumUpdates - 我的工作原理并不清楚.在线之间阅读我假设如果我使用setInterval(60000)并且setNumUpdates(1000)系统将在接下来的6000分钟内继续发回位置更新,或者直到应用程序后台/关闭或我/用户取消位置更新.但这就引出了一个问题 - 应用程序需要做些什么来成为一个好公民.我假设必须是这样的
PendingResult 返回的内容requestLocationUpdates.PendingResultt.cancel()在让应用程序进入后台之前调用如果有人可以评论这个工作流程的正确性,我会非常感激.
一个相关的问题-该文档的PendingResult状态
调用者或回调接收者有责任释放与返回结果相关的任何资源.
我不清楚他们在这里谈论的资源是什么.该LocationListener.onLocationChanged事件返回一个Location对象,我认为该对象在超出范围时将被垃圾收集.据推测,PendingResult返回的requestLocationUpdates应该被取消,然后当应用程序进入后台时设置为null.通过释放资源还有什么需要做的吗?
几个小时之后
我创建了两个版本的测试应用程序
setNumUpdates(10000).以App 1的形式弹出位置变化的祝酒词:位置是......setNumUpdates(1).以App 2`的形式弹出位置变化的祝酒词:位置是......我让两个应用程序同时运行,并在一个名为FakeGPS的非常简洁的小应用程序的帮助下模拟了位置变化.当我第一次进行假位置更改时,App1和App2都为我提供了更新.但是,所有后续位置更改仅由App 1报告.
通过推理,然后setNumUpdates提供定期轮询更新的机制.令人困惑的是,即使在应用程序背景之后更新仍在继续 - 尽管我认为这很大程度上是因为它受操作系统的支配,在它认为合适的时候会杀死它.
但是,以上所有都是基于经验测试.我发现setNumUpdates设置上的惊喜很少.
对于您的问题,即使应用程序处于后台,更新也会继续吗:答:无论 setNumUpdates 是 1 还是 x,当您的应用程序处于后台并且仍然注册更新时,您都会获得更新,除非操作系统已更新为了内存,杀死了你的应用程序。setNumUpdates 唯一的区别是,正如您所说,如果将其设置为 1,它将仅提供一次更新,除非您再次重新注册。链接对 setNumUpdates 有足够的定义 https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#public-methods
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |