Android

时间:2016-05-06 03:33:00

标签: android fusedlocationproviderapi

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

  • 确保API可用

    GoogleApiAvailability api = GoogleApiAvailability.getInstance();
    int code = api.isGooglePlayServicesAvailable(ctxt);
    return (code == ConnectionResult.SUCCESS); 
    
  • 使用指定的回调定义LocationListener,以处理requestLocationUpdates方法撤消的结果。

  • 创建LocationRequest

这是事情变得有些不清楚的地方

  1. setInterval - 应用想要更新位置的时间间隔
  2. setFastestInterval - 消耗更新的时间间隔(如果可用)。
  3. setSmallestDistance& setPriorty - 足够清楚
  4. setNumUpdates - 我的工作原理并不清楚。在线之间阅读我假设如果我使用setInterval(60000)setNumUpdates(1000),系统将继续发送下一个6000分钟的位置更新,或直到应用程序后台/关闭或I /用户取消位置更新。
  5. 但是这引出了一个问题 - 应用程序需要做些什么来成为一个好公民。我假设必须是这样的

    • 记录PendingResult来电所返回的requestLocationUpdates
    • 检测onPause事件何时发生
    • 在让应用程序进入后台之前致电PendingResultt.cancel()

    如果有人可以对此工作流程的正确性发表评论,我将非常感激。

    相关问题 - PendingResult州的documentation

      

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

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

    几个小时后

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

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

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

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

    然而,以上所有都是基于经验测试。我在setNumUpdates设置上发现很少见。

1 个答案:

答案 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