Android 为什么geoEvent返回列表而不是单个GeoFence

Android 为什么geoEvent返回列表而不是单个GeoFence,android,android-geofence,Android,Android Geofence,我已经在我的项目中实施了GeoFence。当地球围栏事件发生时。它返回一个方法名为getTriggeringGeofences的GeoEvent对象,返回触发此geofences转换警报的geofences列表 为什么它返回的是一个列表而不是一个地理围栏 GeofenceReceiver.java 通常,地理围栏被用作了解设备何时进入或离开某个区域的节能方式。在移动设备上,这是通过偶尔轮询网络位置来实现的,这意味着您可以在地理围栏触发之前进入/离开它一段距离 考虑到这一点,考虑这个维恩图。 将图

我已经在我的项目中实施了GeoFence。当地球围栏事件发生时。它返回一个方法名为getTriggeringGeofences的GeoEvent对象,返回触发此geofences转换警报的geofences列表

为什么它返回的是一个列表而不是一个地理围栏

GeofenceReceiver.java


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

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

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


从中可以看出,广播似乎是通过触发事件来分隔的,这意味着每个广播将是进入、退出或暂停事件,因此,如果您退出B并进入A,您将获得两个不同的广播,每个广播都有一个包含1个地理围栏的列表。

如果多个地理围栏的区域重叠,您可以一次与它们交互。
    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();
            }
        }
    }
}