为什么 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 个地理围栏的列表。
我在我的项目中实现了 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 个地理围栏的列表。