7

我正在尝试使用Google 的示例测试地理围栏功能:Creating & Monitoring Geofences。我已经在这里上传了代码

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

  1. 我什至走出我的房子大约 50 英尺然后走回去 - 但没有通知。我可以看到播放服务已连接,甚至“MainActivity.java 中的 GeofenceUtils.ACTION_GEOFENCES_ADDED”被触发,所以我认为地理围栏已正确添加。
  2. 在设置中启用了模拟位置并使用了这个假 GPS 应用程序并更改了位置 - 从与 Geofence1 相同的坐标开始,然后设置为完全在外面的东西(在另一种状态下) - 但我仍然没有收到退出通知。

我究竟做错了什么?任何人都成功地运行了这个谷歌的例子:创建和监控地理围栏。我已在此处上传代码以方便浏览。

我只是想学习地理围栏 - 检测进入和退出。我会将任何答案标记为我可以用来让地理围栏在我的真实设备上工作的正确答案

我在下面输入坐标和半径.

4

4 回答 4

17

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

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

确保服务的路径也正确。

我已经大大简化了 Google 示例,您可以在此处找到代码和说明。我已经删除了 UI 组件和持久的地理围栏存储,所以这个例子应该更容易理解。希望这可以帮助!

于 2014-08-08T18:55:19.510 回答
0

最初我的代码运行顺利,但之后我也遇到了这个问题,请通过修改 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();
            }
于 2014-04-07T07:07:38.390 回答
0

我也遇到了与 Geofence api 相同的问题。最后,我使用了 LocationManager 的 addProximityAlert。效果非常好!

于 2015-11-06T12:35:05.540 回答
-4

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

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

因此,您应该使用以下命令请求坐标:

LocationServices.FusedLocationApi.requestLocationUpdates
于 2015-06-16T12:11:50.010 回答