地理围栏无法按预期工作
Geofences do not work as expected
Creating and Monitoring Geofences example app github 未按预期工作,Google Play 服务中的地理围栏似乎无法正常工作。
我在 Stack Overflow 的其他地方读到,Reto Meier 在 Google IO 提到只有当 phone 接近地理围栏以节省电池时,GPS 才会打开。
好像根本打不开
情况如下:
- 我有一个带有 Google API 的模拟器(真正的 phone 也是如此)。
- 我已经安装了上述开箱即用的应用程序并添加了地理围栏。
- 我有一个 KML 文件可以让我进出地理围栏。
Gofence ENTER 未触发。
现在,为了确保 KML 确实有效,我打开 Google 地图。我玩 KML,我可以看到蓝色 "You Are Here" 点很好地进出地理围栏,并且地理围栏 do 被触发。
当 Google 地图启动且 运行 时,我在状态栏中看到 GPS 指示器。
所以,在我看来,Goefence 只有在 GPS 明确开启时才会被触发。
有人可以解释一下吗? Stack Overflow 上有很多问题都在处理同样的问题。
谢谢。
编辑:
有没有用真机实地测试phone。 位置更新 应用 运行 并跟踪我 Creating and Monitoring Geofences example app 时收到 ENTER/EXIT 事件。我一终止位置更新应用程序,Geofences 应用程序就停止接收 ENTER/EXIT 事件。
在我看来 Google 已经将 Geofences 的功耗优化到了无用的程度。
我找到了解决办法。这是一种滥用,但这是让 Geofence 有用的唯一方法。
我需要做的就是请求位置更新:
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, mGeofencePendingIntent);
现在我们可以注册地理围栏了。
以下是我对上述工作原理的理解:
根据 documentation:
“如果您的应用程序想要被动地观察由其他应用程序触发的位置更新,但又不消耗任何额外的电量,那么请使用 PASSIVE_PROVIDER 此提供程序不会主动打开或修改主动位置提供程序"
在我看来,添加的地理围栏是 PASSIVE_PROVIDERS 之一。这可以解释为什么地理围栏在 Google 地图打开时被触发。
当然,我们可以使用 PRIORITY_BALANCED_POWER_ACCURACY instead of HIGH (~40m accuracy) 来节省一些电量,并在何时开启地理围栏以及开启多长时间。
Creating and Monitoring Geofences example app github 未按预期工作,Google Play 服务中的地理围栏似乎无法正常工作。
我在 Stack Overflow 的其他地方读到,Reto Meier 在 Google IO 提到只有当 phone 接近地理围栏以节省电池时,GPS 才会打开。 好像根本打不开
情况如下:
- 我有一个带有 Google API 的模拟器(真正的 phone 也是如此)。
- 我已经安装了上述开箱即用的应用程序并添加了地理围栏。
- 我有一个 KML 文件可以让我进出地理围栏。
Gofence ENTER 未触发。
现在,为了确保 KML 确实有效,我打开 Google 地图。我玩 KML,我可以看到蓝色 "You Are Here" 点很好地进出地理围栏,并且地理围栏 do 被触发。
当 Google 地图启动且 运行 时,我在状态栏中看到 GPS 指示器。
所以,在我看来,Goefence 只有在 GPS 明确开启时才会被触发。
有人可以解释一下吗? Stack Overflow 上有很多问题都在处理同样的问题。
谢谢。
编辑: 有没有用真机实地测试phone。 位置更新 应用 运行 并跟踪我 Creating and Monitoring Geofences example app 时收到 ENTER/EXIT 事件。我一终止位置更新应用程序,Geofences 应用程序就停止接收 ENTER/EXIT 事件。
在我看来 Google 已经将 Geofences 的功耗优化到了无用的程度。
我找到了解决办法。这是一种滥用,但这是让 Geofence 有用的唯一方法。
我需要做的就是请求位置更新:
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, mGeofencePendingIntent);
现在我们可以注册地理围栏了。
以下是我对上述工作原理的理解: 根据 documentation: “如果您的应用程序想要被动地观察由其他应用程序触发的位置更新,但又不消耗任何额外的电量,那么请使用 PASSIVE_PROVIDER 此提供程序不会主动打开或修改主动位置提供程序"
在我看来,添加的地理围栏是 PASSIVE_PROVIDERS 之一。这可以解释为什么地理围栏在 Google 地图打开时被触发。
当然,我们可以使用 PRIORITY_BALANCED_POWER_ACCURACY instead of HIGH (~40m accuracy) 来节省一些电量,并在何时开启地理围栏以及开启多长时间。