Ricezione degli avvisi di prossimità mediante il geofencing

È possibile utilizzare la classe net.rim.device.api.location.Geofence per definire il perimetro di un'area che l'applicazione deve monitorare. L'applicazione riceve un avviso quando un utente BlackBerry entra o esce dall'area delimitata da confini geografici. Utilizzando il geofencing, è possibile avvisare gli utenti quando entrano in un'area di interesse oppure inviare agli utenti informazioni specifiche sulla loro posizione.

Quando un'applicazione richiama il metodo Geofence.monitorPerimeter(), il server di geofencing invia gli avvisi di prossimità all'applicazione ogni volta che il dispositivo entra o esce dall'area delimitata da confini geografici. Ogni oggetto Geofence può controllare fino a 20 aree simultaneamente.

Definizione di un'area da monitorare

È possibile definire un'area da monitorare specificando le coordinate geografiche di una posizione e un raggio intorno alla posizione oppure è possibile specificare una serie di coordinate che rappresentano un poligono. Quando si specifica una serie di coordinate per definire un poligono, è necessario assicurarsi che nessuna dei lati del poligono si intersechi. In caso contrario, l'area delimitata da confini geografici potrebbe non attivare gli eventi correttamente. Ogni coordinata nella serie è collegata alla coordinata seguente tramite una linea retta. L'ultima coordinata nella matrice è collegata alla prima.
// Single Coordinates object, to be used along with a radius
Coordinates coords = new Coordinates(43.2750, -80.3318, 0);
// Array of three Coordinates objects, representing a three-sided polygon
Coordinates[] coords2 = new Coordinates[3];
coords2[0] = new Coordinates(43.2851, -80.3229, 0);
coords2[1] = new Coordinates(43.2945, -80.3220, 0);
coords2[2] = new Coordinates(43.2852, -80.3199, 0);
Quando si richiama monitorPerimeter(), è necessario passare un riferimento alla classe che implementa GeofenceListener come argomento. È anche necessario specificare un tag per l'area, un buffer intorno all'area e la durata del monitoraggio dell'area. Utilizzare il tag per fornire una descrizione univoca dell'area. Utilizzare il buffer per definire una distanza intorno al perimetro in cui non devono essere attivate le notifiche di geofencing. Ciò evita all'applicazione di trasmettere continuamente notifiche quando un utente entra ed esce dall'area ripetutamente.
GFListener gfListener = new GFListener();
Geofence geofence = new Geofence();
// Starts monitoring the area defined by the coordinate and a radius
geofence.monitorPerimeter(gfListener, "RIM 12", coords, 500, 50, -1);
// Starts monitoring the area defined by the set of coordinates
geofence.monitorPerimeter(gfListener, "RIM campus", coords2, 50, -1);

Rilevamento di eventi di geofencing

Per ricevere gli avvisi di prossimità, implementare l'interfaccia GeofenceListener, che include tre metodi: errorOccurred(), perimeterEntered() e perimeterExited(). Durante il monitoraggio di un'area, l'applicazione richiama uno di questi metodi quando rileva l'evento appropriato. I metodi perimeterEntered() e perimeterExited() ricevono come parametri il tag per la posizione e un oggetto BlackBerryLocation che rappresenta il punto in cui l'utente entra o esce. È possibile utilizzare queste informazioni per descrivere l'area in cui è entrato l'utente oppure per centrare la mappa sulla posizione.
private class GFListener implements GeofenceListener
{
    public void perimeterEntered(String tag, BlackBerryLocation location)
    {
        // Code that runs when a user enters the perimeter      
    }
    public void errorOccurred(int errorCode)
    {
        // Code that runs when an error occurs
    }
    public void perimeterExited(String tag, BlackBerryLocation location)
    {
        // Code that runs when a user leaves the perimeter     
    }
}

Se viene richiamato il metodo errorOccured(), poiché la batteria è scarica oppure i servizi di posizionamento non sono disponibili (errore OUT_OF_SERVICE), l'applicazione smette di ricevere notifiche.

Interruzione del monitoraggio di un'area tramite l'applicazione

Se è necessario interrompere il monitoraggio di un'area tramite l'applicazione, è possibile richiamare Geofence.removePerimeter(String tag).

Argomento successivo: Determinazione della direzione

Le informazioni sono state utili? Inviateci i vostri commenti.