Почему geoEvent возвращает список вместо одного GeoFence
Я реализовал GeoFence в моем проекте. Когда происходит событие GeoFence. Он возвращает объект GeoEvent с именем метода getTriggeringGeofences (возвращает список геозон, которые вызвали это предупреждение о переходе геозоны.).
Почему он возвращает список вместо одного геозоны?
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();
}
}
}
}
1 ответ
Обычно геозоны используются в качестве энергоэффективного способа узнать, когда устройство входит в регион или покидает его. На мобильных устройствах это достигается путем периодического опроса сетевых местоположений, что означает, что вы можете пройти некоторое расстояние в / из геозоны, прежде чем она сработает.
Имея это в виду, рассмотрим эту диаграмму Венна.
Считайте верх изображения северным. Если вы войдете с запада в геозону "А", вы, скорее всего, вызовете ENTER только в этой геозоне. То же самое, если вы пришли с востока. Однако, если вы приехали с севера или юга между "А" и "В", вы окажетесь внутри обеих геозон. В этот момент вы вызвали событие ENTER для обоих, поэтому вместо того, чтобы вызывать ваш получатель дважды подряд, он просто выдаст вам список геозон, которые были вызваны этим событием, после чего вы должны выполнить итерации по ним и выполнить любое действие, необходимое для данного события в каждой геозоне.
Глядя на документы, кажется, что трансляции разделены инициирующими событиями, то есть каждая трансляция будет либо ENTER, EXIT, либо DWELL, поэтому, если вы ВЫХОДИТЕ "B" и ENTER "A", вы должны получить две разные трансляции, каждый со списком из 1 геозоны.