[Android]:关于GoogleFusedLocation API的一些问题

时间:2017-04-26 09:14:35

标签: android gps google-play-services fusedlocationproviderapi

我目前正在使用一个使用位置进行操作的Android应用。想象一下,当你运行app时,它会显示所有附近的酒店。

在阅读互联网后,我将谷歌融合位置应用到我的应用程序,但发生了一些问题,我不知道如何解决它。

以下是我的方法:

  1. 当SplashActivity启动时,我运行LocationService来创建位置请求并请求位置更新。我使用HIGH_ACCURACY选项并同时使用GPS和网络提供商。
  2. 在onLocationChanged()中,我调用Geocode Intent Service来解析lat lng到地址。
  3. 当Geocode Intent Service完成时,我收到结果感谢ResultReceiver(我的方式与Google教程完全相同)并向SplashActivity发送广播。
  4. 当SplashActivity接收广播时,我启动了我的MainActivity。

    • 如果我的方法是使用FusedLocationService的正确方法,请告诉我,这是我第一次制作基于位置的应用。

    • 有时,onLocationChanged()需要很长时间才能响应(大约3分钟,有时会永远)。我注意到这个问题只发生在Android OS 5,6,7(我确实请求权限)上,但有时它真的很快(1-2秒)。这个问题让我很难过,我不知道如何解决这个问题。

    • 我正在考虑应用最后一个已知位置来解决上述问题,但我想知道是否有办法为requestLocationUpdate()设置超时。我的应用程序需要用户当前位置来显示数据,所以我不认为最后知道的位置是个好主意。无论如何,很高兴听到你对此的看法。

  5. 感谢阅读。

1 个答案:

答案 0 :(得分:0)

首先,考虑一个新鲜或旧的位置可能取决于您的情况。我的意思是,一个十分钟的位置可能对天气应用程序很有用,但对于跟踪意图听起来并不好。

恕我直言,整个过程看起来有点糟糕,即使在启动画面后你也可以给用户接收位置

无论如何,我有一个场景给你

  • 定义超时值,例如10秒
  • 立即生成位置请求值(设置间隔和最快间隔0)
  • 如果您收到位置,请删除位置更新,停止超时并使用位置(对于地理编码器)
  • 我们无法收到位置并完成超时,请参阅上一个已知位置
  • 如果最后一个已知位置对我们很好(在第一段中提到),请使用位置(用于地理编码器)