为什么 geoEvent returns 是一个列表而不是单个 GeoFence

Why geoEvent returns a list instead of single GeoFence

我在我的项目中实现了 GeoFence。当地理围栏事件发生时。它 returns 一个具有方法名称 getTriggeringGeofences 的 GeoEvent 对象(Returns 触发此地理围栏转换警报的地理围栏列表。)。

Why it is returning a list instead of single geoFence?

GeofenceReceiver.java

    public class GeofenceReceiver extends BroadcastReceiver {

    public static final String TAG = GeofenceReceiver.class.getSimpleName();
    private Context mContext;

    @Override
    public void onReceive(Context context, Intent intent) {

        mContext = context;
        GeofencingEvent geoEvent = GeofencingEvent.fromIntent(intent);

        Location triggredLocation = geoEvent.getTriggeringLocation();

        if (geoEvent.hasError()) {
            Log.d(TAG, "Error GeofenceReceiver.onHandleIntent");
        } else {
            Log.d(TAG, "GeofenceReceiver : Transition -> "
                    + geoEvent.getGeofenceTransition());

            int transitionType = geoEvent.getGeofenceTransition();

            if (transitionType == Geofence.GEOFENCE_TRANSITION_ENTER
                    || transitionType == Geofence.GEOFENCE_TRANSITION_DWELL
                    || transitionType == Geofence.GEOFENCE_TRANSITION_EXIT) {
                //why it is a list of GeoFence
                List<Geofence> triggerList = geoEvent.getTriggeringGeofences();
            }
        }
    }
}

通常,地理围栏被用作了解设备何时进入或离开区域的一种节能方式。在移动设备上,这是通过偶尔轮询网络位置来实现的,这意味着您可以在地理围栏触发之前从地理围栏移动一段距离 into/away。

考虑到这一点,考虑一下这个维恩图。

将图像的顶部视为北方。如果您从西方进入地理围栏 "A",您很可能只会在该地理围栏处触发 ENTER。如果你来自东方,也一样。但是,如果您来自 "A" 和 "B" 之间的北方或南方,您将在两个地理围栏内。此时,您已经触发了两者的 ENTER 事件,因此它不会连续两次调用您的接收器,它只会为您提供此事件触发的地理围栏列表,此时您应该遍历它们并在每个地理围栏上执行事件所需的任何操作。

查看 docs,似乎广播是由触发事件分隔的,这意味着每个广播都将是 ENTER、EXIT 或 DWELL 事件,因此如果您退出 "B" 和 ENTER "A",你应该得到两个不同的广播,每个都有一个包含 1 个地理围栏的列表。