Geofencing:调试器显示Geofence.GEOFENCE_TRANSITION_ENTER的值等于0

时间:2015-09-30 16:03:18

标签: android android-geofence android-debug

我正在尝试在我的应用中实现地理围栏,但我不明白为什么调试器显示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));
    }

}

1 个答案:

答案 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)永远不会为真。