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

时间:2014-04-07 06:35:19

标签: android location geofencing android-geofence

我正在尝试使用Google's example: Creating & Monitoring Geofences测试地理围栏功能。我上传了code here

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

  1. 我甚至走出家门大约50英尺,然后走回来 - 但没有通知。我可以看到播放服务已连接,甚至"GeofenceUtils.ACTION_GEOFENCES_ADDED in MainActivity.java"被触发,所以我认为Geofences正在被正确添加。
  2. 在设置中启用模拟位置并使用此Fake GPS App并更改位置 - 从与Geofence1相同的坐标开始,然后设置为完全在外(在另一个状态) - 但我仍然没有得到退出通知
  3. 我做错了什么? ANyone成功运行了这个Google's example: Creating & Monitoring Geofences。我上传了code here以便于浏览。

    我只是想学习Geofencing - 检测入口和放大器出口。 我将回答任何答案作为我可以使用的正确答案,以便在我的真实设备上工作

    I enter the coordinates and radius below

4 个答案:

答案 0 :(得分:16)

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

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

确保服务的路径也正确。

我已经大大简化了Google示例,您可以找到代码和解释here。我删除了UI组件和持久的Geofence存储,因此这个示例应该更容易理解。希望这有帮助!

答案 1 :(得分: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();
            }

答案 2 :(得分:0)

Geofence api也遇到了同样的问题。最后,我使用了LocationManager的addProximityAlert。它确实运行得很好!

答案 3 :(得分:-4)

如您所见,Google重新定位了位置逻辑,这是新的API。似乎它起作用&#34;共享&#34;位置提供者(LocationRequest#setFastestInterval可以为您提供坐标,如果有任何其他应用程序请求它,或者您可以通过PRIORITY_NO_POWER flag接收坐标。

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

因此,您应该使用以下方式请求坐标:

LocationServices.FusedLocationApi.requestLocationUpdates