当 Google Play 服务无法获得位置修复时,我如何获得通知?

Posted

技术标签:

【中文标题】当 Google Play 服务无法获得位置修复时,我如何获得通知?【英文标题】:How can I get notified when Google Play Services can not get a location fix? 【发布时间】:2013-08-30 14:02:27 【问题描述】:

我有一个 android 应用程序需要确定其当前位置(使用 Google Play 服务 LocationClient),然后将该位置发送回服务器。这需要在后台定期发生,例如每 5 分钟一次

此代码运行良好,它通常每 5 分钟提供一次位置,误差在几秒内。当android无法修复时会出现问题。在这些情况下,我希望回调在 5 分钟后使用 NULL 位置对象运行,但是这不会发生。应用程序只是继续寻找位置而不调用回调。

我调用我的 LocationClient 的 requestLocationUpdates 方法,并使用如下创建的 locationRequest 对象

locationrequest = LocationRequest.create();
locationrequest.setInterval(5 * 60 * 1000);  
locationrequest.setFastestInterval(3 * 60 * 1000);
locationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationrequest.setExpirationDuration(45 *1000);
locationclient.requestLocationUpdates(locationrequest, mPendingIntent);

我看不到让 LocationClient 每 5 分钟呼叫我一次的合适方法,即使它无法获取位置也是如此。我很感激我可以每 5 分钟发出一次警报,然后将最近的位置发送回服务器,但我希望在回调中处理发送。

有没有其他人必须处理这种情况,或者知道如何解决它?

【问题讨论】:

请记住,您使用的是locationclient.requestLocationUpdates...,您将收到更新通知,但如果设备无法获取位置,它将不会更新,因此不会通知。您可能想通过运行计时器或类似的东西来尝试不同的方法。每个文档:It may take a while to receive the first location update. If an immediate location is required, applications may use the getLastKnownLocation(String) method. 我的 4.0 手机一直在寻找某个位置时遇到问题,只有当我(手动)关闭使用辅助 gps 时,它才能在可接受的参数范围内运行。 【参考方案1】:

我不知道您在其余代码中在做什么,但我认为您只需要管理与 ActivityFragment 的生命周期方法相关的 LocationRequestLocationClient你打电话给他们。

android 开发者博客中的receiving location updates 教程和this post 就是很好的例子。

由于您的应用必须连接到LocationClient 才能接收更新,如果您在onResume()onCreate()onCreate()onStop() 期间打开和关闭这些更新,您实际上只在应用处于前台时运行计时器.然后,正如开发人员博客文章所建议的那样,当您的应用程序处于后台时,您可以切换到被动位置侦听器,该侦听器仍然可以接收更新,但不会使用基于相同计时器的方法。当您的应用返回前台时,您可以关闭被动侦听器,重新连接到Google Play Services 并再次启动您的 5 分钟计时器。

【讨论】:

问题是应用很少在前台。它通常在后台收集位置数据并将其发送回服务器。这一切都很好,唯一的问题是当它无法获取位置时它不会给我回电话。 我明白了。但据我了解 LocationClient,一旦您失去与 GooglePlayServices 的连接,就无法更新位置。在这种情况下,无需在每次计时器运行时触发回调(例如,发回空值),因为一旦您通过连接丢失回调收到通知,5 分钟计时器就会变得无关紧要。我要做的是(1)设置一个布尔标志,当与 GooglePlay 的连接丢失时,我会使用计时器检查该标志,或者(2)使用 BroadcastReceiver 我没有失去与 GooglePlayServices 的连接。我有连接,但设备无法获取位置,因此它不会通知我。正如@blindstuff 上面所说的,问题是位置没有改变,所以没有理由打电话给我的回调。我想我需要每 5 分钟启动一次 AlarmManager 并获取它可以发送到服务器的最新位置。

以上是关于当 Google Play 服务无法获得位置修复时,我如何获得通知?的主要内容,如果未能解决你的问题,请参考以下文章

无法将Google Play位置服务添加为我的Android项目的依赖项

Google Play 服务 - 当前位置

Google Play 游戏服务错误:无法登录 - 应用程序没有注册的客户端 ID?其他修复无效

无法登陆google play怎么办?说与服务器连接不上。

当应用程序和设备中的 Google Play 服务不同时,使用融合位置获取 CurrentLocation 0

无法在我的 Genymotion 中安装 Google Play 服务