地理围栏不能按预期工作

时间:2015-01-23 18:37:26

标签: google-play-services geofencing

github上的

Creating and Monitoring Geofences example app无法按预期工作,Google Play服务中的Geofences似乎无法正常工作。

我已经在Stack Overflow的其他地方看过,Reto Meier在Google IO上提到,只有当手机接近地理围栏以节省电池时,GPS才会开启。 似乎它根本没有开启。

情况如下:

  • 我有一个使用Google API的模拟器(与真实手机相同)。
  • 我已经安装了上面提到的应用程序并添加了Geofence。
  • 我有一个KML文件可以驱逐我进出Geofence。

Gofence ENTER 已触发。

现在,为了确保KML确实有效,我打开谷歌地图。我玩KML,我可以看到蓝色"你在这里" dot很好地进出地理围栏,地理围栏被触发。

Google地图启动并运行时,我会在状态栏中看到GPS指示灯。

所以,在我看来,只有明确开启GPS才会触发Goefence。

有人可以解释一下吗? Stack Overflow上有很多问题可以解决同样的问题。

感谢。

修改: 用真正的手机测试了现场。当Location Updates应用程序正在运行并且跟踪我Creating and Monitoring Geofences example app正在获取ENTER / EXIT事件时。一旦我杀死了位置更新应用程序,Geofences应用程序就停止了获取ENTER / EXIT事件。

对我而言,谷歌已经将Geofences的功耗优化到了无用的地步。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。这是一种滥用,但这是让Geofence变得有用的唯一方法。

我需要做的就是请求位置更新:

mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, mGeofencePendingIntent);

现在我们可以注册地理围栏了。

以下是我理解上述原因的原因: 根据{{​​3}}: “如果您的应用程序想要被动地观察由其他应用程序触发的位置更新,否则不会消耗任何额外的电源,那么请使用PASSIVE_PROVIDER此提供程序不会主动打开或修改活动位置提供程序

在我看来,添加地理围栏是PASSIVE_PROVIDERS之一。这可以解释为什么在Google地图开放时会触发地理围栏。

当然,我们可以使用documentation而不是HIGH(PRIORITY_BALANCED_POWER_ACCURACY)来保留一些电池,并且在我们放置地理围栏和持续多长时间时要聪明。