2017-03-28 2 views
0

Ich habe GeoFence in meinem Projekt implementiert. Wenn geoFence-Ereignis auftritt. Sie gibt ein GeoEvent-Objekt mit dem Methodennamen getTriggeringGeofences zurück (Gibt eine Liste mit Geofences zurück, die diesen Geofence-Übergangsalarm ausgelöst haben.).Warum geoEvent eine Liste anstatt einzelner GeoFence zurückgibt

Warum gibt es eine Liste anstatt einzelner 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(); 
      } 
     } 
    } 
} 
+0

Sie können mit mehreren Geofences gleichzeitig interagieren, wenn sich ihre Bereiche überschneiden. –

Antwort

1

Typischerweise werden geofences als leistungseffiziente Art und Weise verwendet zu wissen, wann ein Gerät eingibt oder einen Bereich verlässt. Auf Mobilgeräten wird dies durch gelegentliches Abrufen von Netzwerkstandorten erreicht. Dies bedeutet, dass Sie eine gewisse Distanz zum Geofence zurücklegen können, bevor es ausgelöst wird.

In diesem Sinne, betrachten Sie dieses Venn-Diagramm.

Geofence

Betrachten Sie die Oberseite des Bildes als Nord. Wenn Sie aus dem Westen in Geofence "A" kommen, werden Sie die ENTER wahrscheinlich nur an diesem Geofence auslösen. Gleiches, wenn Sie aus dem Osten kommen. Wenn Sie jedoch von Norden oder Süden zwischen "A" und "B" kommen, befinden Sie sich in beiden Geofences. An dieser Stelle haben Sie das ENTER-Ereignis auf beiden Seiten ausgelöst. Anstatt also Ihren Empfänger zweimal hintereinander anzurufen, erhalten Sie nur die Liste der Geofences, die mit diesem Ereignis ausgelöst wurden. An diesem Punkt sollten Sie sie durchlaufen und Führen Sie auf jedem Geofence die für das Ereignis erforderlichen Aktionen aus.

Betrachtet man die docs, scheint es, dass die Übertragungen durch Auslösen von Ereignissen getrennt sind, was bedeutet, dass jede Sendung entweder ENTER, EXIT oder DWELL-Ereignisse ist. Wenn Sie also "B" und ENTER "A" verlassen, sollten Sie erhalten zwei verschiedene Sendungen mit jeweils einer Liste von 1 Geofence.

Verwandte Themen