我正在尝试使用Google's example: Creating & Monitoring Geofences测试地理围栏功能。我上传了code here。
问题是我从未收到进入或退出的通知。我有Wifi,4G和GPS。我试图通过以下方式进行测试:
我做错了什么? ANyone成功运行了这个Google's example: Creating & Monitoring Geofences。我上传了code here以便于浏览。
我只是想学习Geofencing - 检测入口和放大器出口。 我将回答任何答案作为我可以使用的正确答案,以便在我的真实设备上工作
答案 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