在Geofencing的Google教程中没有看到Geofence转换

我正在尝试使用Google的示例testingGeofencefunction:创build和监视地理围栏 。 我已经在这里上传了代码 。

问题是我从来没有得到进入或退出的通知。 我有Wifi,4G和GPS。 我曾尝试通过以下方式进行testing:

  1. 我甚至走出我的房子约五十英尺,走回去,但没有通知。 我可以看到播放服务被连接,甚至MainActivity.java中的“GeofenceUtils.ACTION_GEOFENCES_ADDED”被触发,所以我认为Geofences正在被正确添加。
  2. 在设置中启用模拟位置,并使用这个假GPS应用程序和改变的位置 – 从Geofence1相同的坐标开始,然后设置为完全外(在另一个状态) – 但我仍然没有得到一个退出通知。

我究竟做错了什么? ANYONE成功运行了这个Google的例子:Creating&Monitoring Geofences 。 我已经在这里上传代码,以方便浏览。

我只是试图学习Geofencing – 检测进入和退出。 我将标记任何答案作为正确的答案,我可以使用在我的实际设备上进行工作

我在下面输入坐标和半径

Solutions Collecting From Web of "在Geofencing的Google教程中没有看到Geofence转换"

我也遇到了示例代码的问题。 我的主要问题之一是在声明ReceiveTransitionsIntentService。 您不需要添加BroadcastReceiver或请求位置更新,但是您需要更改AndroidManifest以将导出的值设置为true,如下所示:

<service android:name=".ReceiveTransitionsIntentService" android:exported="true" > </service> 

确保服务的path也是正确的。

我已经简化了Google的例子,你可以在这里find代码和解释。 我已经删除了UI组件和持久Geofence存储,所以这个例子应该更容易遵循。 希望这可以帮助!

最初我的代码运行平稳,但之后,我也得到了这个问题,请尝试通过修改continueAddGeofences()函数geofenceRequester类。 基本上是通过位置请求的方式来调用接收者

  private void continueAddGeofences() { // Get a PendingIntent that Location Services issues when a geofence // transition occurs mGeofencePendingIntent = createRequestPendingIntent(); // Send a request to add the current geofences mLocationClient.addGeofences(mCurrentGeofences, mGeofencePendingIntent, this); //mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); try { LocationRequest locationrequest = LocationRequest.create(); locationrequest.setPriority(locationrequest.PRIORITY_HIGH_ACCURACY); locationrequest.setInterval(3000); mLocationClient.requestLocationUpdates(locationrequest, mGeofencePendingIntent); } catch (Exception e) { e.printStackTrace(); } 

我也有与Geofence API相同的问题。 最后,我使用了LocationManager的addProximityAlert,它工作得非常好!

如您所见,Google重新定位了逻辑,这是新的API。 看起来它工作为“共享”的位置提供者( LocationRequest#setFastestInterval可以为您提供坐标,如果有其他应用程序请求它,或者您可以接收带有PRIORITY_NO_POWER flag坐标)。

Geofence API就像helper方法,你不需要自己开发类似的逻辑(计算半径等)。 但是, Geofence不会自行请求坐标,它只是使用接收到的坐标(即来自其他应用程序)。 方法命名是不言自明的: LocationServices.GeofencingApi.addGeofences; => addGeofences ,而不是requestGeofences

所以你应该使用

 LocationServices.FusedLocationApi.requestLocationUpdates