Receber alertas de proximidade usando geofence

Você pode usar a classe net.rim.device.api.location.Geofence para definir um perímetro ao redor de uma área que você deseja que seu aplicativo monitore. Seu aplicativo recebe um alerta sempre que um usuário do aparelho BlackBerry acessa ou deixa uma área de geofence. Ao usar geofencing, você pode alertar seus usuários quando eles entram em uma área de interesse, ou você pode enviar informações de usuários específicas de suas localizações.

Quando um aplicativo chama o método Geofence.monitorPerimeter(), o servidor de Geofence enviará alertas de proximidade ao aplicativo sempre que o aparelho acessa ou deixa a área de geofence. Cada objeto Geofence pode monitorar até 20 áreas simultaneamente.

Definir uma área a monitorar

Você pode definir uma área para monitorar especificando as coordenadas geográficas de uma localização e um raio ao redor desta localização, ou então especificar um conjunto de coordenadas que representem um polígono. Quando você especifica um conjunto de coordenadas representando um polígono, você deve assegurar que nenhuma das linhas cruza com outra, senão a área de geofence talvez não dispare os eventos corretamente. Cada coordenada na matriz é unida à coordenada que a segue por uma linha reta. A última coordenada na seqüência é unida à primeira.
// 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 você chama monitorPerimeter(), deve passar uma referência à classe que implementa GeofenceListener como um argumento. Você também deve especificar uma tag para a área, um buffer ao redor da área e o tempo que deseja monitorar a área. Use a tag para fornecer uma descrição exclusiva da área. Use a memória intermediária para definir uma distância ao redor do perímetro onde as notificações de geofencing não podem ocorrer, que pode ajudar a impedir que o aplicativo transmita notificações repetidamente quando um usuário de aparelho sair e entrar repetidamente na área.
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);

Ouvir eventos de geofence

Para receber alertas de proximidade, implemente a interface GeofenceListener que contém três métodos: errorOccurred(), perimeterEntered() e perimeterExited(). Quando uma área está sendo monitorada, o aplicativo chama um desses métodos quando o evento apropriado ocorre. Os métodos perimeterEntered() e perimeterExited() recebem como parâmetros a tag para a localização e um objeto BlackBerryLocation que representa onde o usuário acessa ou deixa. Você pode usar essas informações para descrever a área que está sendo acessada ou para centralizar um mapa na localização.
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 errorOccured() for chamado devido à bateria fraca ou se serviços de localização estiverem indisponíveis (erro OUT_OF_SERVICE), o aplicativo irá parar de receber notificações.

Parar seu aplicativo de monitorar uma área

Se você precisar parar seu aplicativo de monitorar uma área, poderá chamar Geofence.removePerimeter(String tag).


Estas informações foram úteis? Gostaríamos de receber seus comentários.