我正在尝试在我的应用中实现地理围栏,但我不明白为什么调试器显示Geofence.GEOFENCE_TRANSITION_ENTER的值等于0。
下面是我的onHandleIntent。如果我理解正确,那么如果设备已经在地理围栏内,那么
geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER
应该为true,因为geofenceTransition的值由调试器显示1,但由于Geofence.GEOFENCE_TRANSITION_ENTER等于0(??),if块不会执行。我正在测试MI Redmi android设备。任何帮助将不胜感激。
@Override
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {
Log.e(TAG, "Error in geofencing event");
return;
}
// Get the transition type.
int geofenceTransition = geofencingEvent.getGeofenceTransition();
// Test that the reported transition was of interest.
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER) {
Toast.makeText(this,"Entered geofence",Toast.LENGTH_LONG).show();
} else {
// Log the error.
Toast.makeText(this,"Not entered",Toast.LENGTH_LONG).show();
Log.e(TAG, String.valueOf(geofenceTransition));
}
}
答案 0 :(得分:0)
经过一年多的努力,我已经确定你已经解决了这个问题 - 或者放弃并进入房地产开发市场!
当然,查看com.google.android.gms.location代码,Geofence.GEOFENCE_TRANSITION_ENTER
是一个设置为1的常量。
因此,要么您误读了某些内容,旧版本的com.google.android.gms.location代码就会出现错误,否则不平等就会出现在其他地方。
此问题的唯一原因是您在创建GeofencingRequest
时没有设置初始触发器。
GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
如果您错误地设置了触发器(即INITIAL_TRIGGER_EXIT),您的Intent处理程序将仅针对该触发器触发,因此if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER)
永远不会为真。