You are on page 1of 113

BlackBerry Java SDK

Location-Based Services Versin: 6.0


Gua de desarrollo

Publicado: 2010-12-22 SWD-1239071-1222061021-005

Contenido
1 Descripcin general de los servicios basados en ubicacin.............................................................................. 2 Descripcin general de GPS.............................................................................................................................. Activar y poner en cola los Servicios de ubicacin en el dispositivo................................................................. Consultar las fuentes de ubicacin................................................................................................................... Especificar el modo GPS.................................................................................................................................... Modos GPS................................................................................................................................................ Especificar el modo GPS utilizando JSR 179...................................................................................................... Especificar el modo GPS (JSR 179)............................................................................................................. Propiedades de asignacin de criterios..................................................................................................... Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179............................................. Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179...................................... Recuperar la informacin de la ubicacin utilizando el modo GPS asistido..................................................... Modo asistido mediante un servidor PDE................................................................................................. Comprobar que se requiere informacin del servidor PDE....................................................................... Especificar informacin del servidor PDE.................................................................................................. Ejemplo de cdigo: Especificar la informacin del servidor PDE............................................................... Recuperar un proveedor de ubicacin............................................................................................................. Recuperar un proveedor de ubicacin utilizando la clase LocationProvider............................................. Controlar el rastreo de ubicaciones utilizando la clase BlackBerryLocationProvider................................ Controlar el rastreo de ubicaciones utilizando la clase BlackBerryLocationProvider................................ Ejemplo de cdigo: Utilizar la clase BlackBerryLocationProvider para controlar el rastreo de ubicaciones ................................................................................................................................................................... Recuperar un proveedor de ubicacin utilizando la clase BlackBerryLocationProvider............................ Recuperar la ubicacin de un dispositivo BlackBerry....................................................................................... Recuperar la ubicacin de un dispositivo BlackBerry................................................................................ Ejemplo de cdigo: Recuperar la ubicacin GPS de un dispositivo BlackBerry......................................... Recuperar la ubicacin de un dispositivo BlackBerry especificando solicitudes continuas del punto de posicin..................................................................................................................................................... Ejemplo de cdigo: Recuperar la ubicacin GPS de un dispositivo BlackBerry utilizando solicitudes continuas del punto de posicin................................................................................................................ Recuperar la informacin de la ubicacin utilizando la clase Location..................................................... Recuperar informacin de la ubicacin utilizando la clase Location......................................................... Ejemplo de cdigo: Utilizar la clase Location para recuperar informacin de la ubicacin GPS............... Recuperar la informacin de ubicacin utilizando la clase BlackBerryLocation........................................ Recuperar informacin del satlite utilizando la clase BlackBerryLocation.............................................. Ejemplo de cdigo: Utilizar la clase BlackBerryLocation para recuperar informacin del satlite............ 4 5 6 7 8 8 9 9 10 11 12 13 13 13 13 15 16 16 18 19 20 21 22 22 24 25 26 27 27 28 29 30 31

Cambiar los criterios para recibir informacin de ubicacin..................................................................... Ejemplo de cdigo: Modificar los criterios para recuperar informacin de ubicacin.............................. Gestionar errores.............................................................................................................................................. Administrar errores (JSR 179).................................................................................................................... Administrar errores (extensiones de BlackBerry para JSR 179)................................................................. Recuperar una ubicacin GPS utilizando una pgina Web............................................................................... Recuperar una ubicacin GPS utilizando una pgina Web........................................................................ 3 Descripcin general de la geoubicacin........................................................................................................... Modos de geoubicacin.................................................................................................................................... Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin............................................. Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin...................................... Ejemplo de cdigo: recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin....... Recuperar la posicin ptima con GPS y geoubicacin.................................................................................... Recuperar la posicin ptima.................................................................................................................... Ejemplo de cdigo: recuperar la posicin ptima..................................................................................... Recuperar varias posiciones ptimas........................................................................................................ Ejemplo de cdigo: recuperar varias posiciones ptimas......................................................................... Solicitar actualizaciones simultneas de geoubicacin y GPS.......................................................................... 4 Codificacin geogrfica y codificacin geogrfica inversa................................................................................ Recuperar las coordenadas geoespaciales de una direccin utilizando la codificacin geogrfica.................. Recuperar una direccin utilizando la codificacin geogrfica inversa............................................................ Ejemplo de cdigo: recuperar una direccin utilizando coordenadas geoespaciales y codificacin geogrfica inversa.............................................................................................................................................................. 5 BlackBerry Maps............................................................................................................................................... Abrir BlackBerry Maps desde la aplicacin....................................................................................................... Abrir BlackBerry Maps utilizando la configuracin predeterminada................................................................ Abrir BlackBerry Maps utilizando informacin de un contacto........................................................................ Abrir BlackBerry Maps utilizando coordenadas especficas............................................................................. Abrir BlackBerry Maps utilizando un hito......................................................................................................... Abrir BlackBerry Maps utilizando un documento de ubicacin........................................................................ Elemento XML: <lbs>................................................................................................................................. Elemento XML: <location>......................................................................................................................... Elemento XML: <getRoute>....................................................................................................................... Mostrar y borrar ubicaciones de un mapa utilizando un documento de ubicacin.................................. Mostrar y borrar una ruta en un mapa utilizando un documento de ubicacin....................................... Abrir BlackBerry Maps utilizando una bsqueda local.....................................................................................

33 34 35 36 36 39 40 42 42 43 43 47 49 50 54 56 60 62 63 63 65 66 68 68 68 69 71 72 73 73 75 76 77 78 80

Utilizar documentos KML con BlackBerry Maps............................................................................................... Elementos KML compatibles..................................................................................................................... Crear un documento KML bsico............................................................................................................... Visualizar superposiciones KML en BlackBerry Maps................................................................................ Invocar BlackBerry Maps utilizando un documento KML.......................................................................... Abrir BlackBerry Maps desde BlackBerry Browser........................................................................................... 6 Mapas personalizados...................................................................................................................................... Agregar un mapa a una aplicacin.................................................................................................................... Agregar un mapa a una aplicacin............................................................................................................ Ejemplo de cdigo: agregar un mapa a una aplicacin............................................................................. Especificar ubicaciones en un mapa................................................................................................................. Etiquetar y configurar la visibilidad de las ubicaciones en un mapa................................................................ Etiquetar y configurar la visibilidad de las ubicaciones en un mapa......................................................... Ejemplo de cdigo: etiquetar y configurar la visibilidad de las ubicaciones en un mapa.......................... Crear una imagen esttica de un mapa............................................................................................................ Agregar campos sobre un mapa....................................................................................................................... Mostrar superposiciones KML en un mapa......................................................................................................

81 81 82 82 83 84 85 85 86 87 88 89 90 92 93 94 95

7 Navegacin....................................................................................................................................................... 97 Recuperar la duracin y distancia estimadas del viaje..................................................................................... 97 Recuperar la duracin y distancia estimadas del viaje.............................................................................. 97 Ejemplo de cdigo: recuperar la duracin y distancia estimadas del viaje............................................... 101 8 Obtener ms informacin................................................................................................................................. 104 9 Glosario............................................................................................................................................................. 105 10 Comentarios..................................................................................................................................................... 106 11 Historial de revisin del documento................................................................................................................. 107 12 Aviso legal......................................................................................................................................................... 109

Gua de desarrollo

Descripcin general de los servicios basados en ubicacin

Descripcin general de los servicios basados en ubicacin


Puede recuperar informacin de ubicacin para un dispositivo utilizando uno de los siguientes servicios:

Puede crear aplicaciones basadas en ubicacin y mapas para los dispositivos BlackBerry mediante las API de los servicios basados en ubicacin que proporciona BlackBerry Java SDK. Puede utilizar estas API para recuperar la ubicacin de un dispositivo BlackBerry, mostrar informacin de ubicacin en un mapa y desplazarse a una ubicacin. GPS: proporciona informacin de ubicacin mediante satlites GPS Geoubicacin: proporciona una ubicacin aproximada utilizando la posicin de la antena celular y los puntos de acceso de WLAN Codificacin geogrfica y codificacin geogrfica inversa: proporciona las coordenadas geoespaciales de una calle (codificacin geogrfica), as como la calle de las coordenadas geoespaciales (codificacin geogrfica inversa)

Para mostrar informacin de ubicacin, puede elegir integrar su aplicacin con BlackBerry Maps o bien puede incrustar y crear una aplicacin de asignacin personalizada utilizando la API de Maps proporcionada en el paquete net.rim.blackberry.api.maps. Puede utilizar la API de Maps para incrustar un mapa en una aplicacin, agregar datos a un mapa, mostrar superposiciones KML y crear imgenes estticas de un mapa. Para proporcionar informacin de navegacin, por ejemplo, la duracin estimada del viaje, puede utilizar la API de duracin del viaje proporcionada en el paquete net.rim.device.api.lbs.travel . La API de duracin del viaje utiliza los datos de trfico actuales y anteriores con el fin de proporcionar una estimacin de la duracin total del viaje y la distancia para un desplazamiento en automvil a destinos de Estados Unidos y Canad.

Gua de desarrollo

Descripcin general de GPS

Descripcin general de GPS

Puede permitir que una aplicacin del dispositivo BlackBerry recupere la ubicacin GPS de un dispositivo BlackBerry. Los valores correspondientes a la informacin de la ubicacin se devuelven en forma de coordenadas para la latitud, la longitud y la altitud. El modo GPS que especifique para recuperar la informacin de la ubicacin depende del tipo de aplicacin que desee desarrollar. Los modos GPS incluyen el modo autnomo, el modo asistido y el modo estacin base. El modo GPS puede afectar a la velocidad inicial de un punto de posicin GPS y al nivel de precisin de la ubicacin. Por ejemplo: una aplicacin meteorolgica quizs especifique el modo estacin base, que puede ofrecer rpidamente una ubicacin aproximada. Para obtener ms informacin acerca de los modelos de dispositivo BlackBerry y sus correspondientes modos GPS disponibles, visite http://www.blackberry.com/knowledgecenterpublic para leer el artculo DB-00615. Para recuperar la informacin de ubicacin, puede utilizar la API de ubicacin JSR 179 para Java ME en el paquete javax.microedition.location, o en la extensin de BlackBerry a JSR 179 en el paquete net.rim.device.api.gps. La API de ubicacin JSR 179 para Java ME es compatible con dispositivos BlackBerry que ejecutan BlackBerry Device Software versin 4.0.2 o posterior. Las extensiones de BlackBerry para JSR 179 son compatibles con dispositivos BlackBerry que ejecutan BlackBerry Device Software versin 5.0.0 o posterior. La recuperacin de la ubicacin GPS de un dispositivo BlackBerry conlleva las siguientes acciones: Especificar el modo GPS Recuperar un proveedor de ubicacin Hacer una solicitud GPS basada en la frecuencia del punto de posicin GPS Recuperar la ubicacin GPS de un dispositivo BlackBerry

Ejemplo de cdigo: Especificar el modo GPS


/* JSR 179 */ Criteria myCriteria = new Criteria(); /* JSR 179 extension */ BlackBerryCriteria myBlackBerryCriteria = new BlackBerryCriteria();

Ejemplo de cdigo: Recuperar un proveedor de ubicacin


/* JSR 179 */ LocationProvider myProvider = LocationProvider.getInstance(myCriteria); /* JSR 179 extension */ BlackBerryLocationProvider myBlackBerryProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myBlackBerryCriteria);

Ejemplo de cdigo: Realizar una solicitud GPS basada en la frecuencia del punto de posicin GPS
/* * Single GPS fix */

Gua de desarrollo

Activar y poner en cola los Servicios de ubicacin en el dispositivo

/* JSR 179 */ Location myLoc = myProvider.getLocation(); /* JSR 179 extension */ BlackBerryLocation myBlackBerryLoc = myBlackBerryProvider.getLocation(); /* * Continuous GPS fixes */ /* JSR 179 */ myProvider.setLocationListener(); /* JSR 179 extension */ myBlackBerryProvider.setLocationListener();

Ejemplo de cdigo: Recuperar la ubicacin GPS de un dispositivo BlackBerry


/* JSR double /* JSR double 179 lat 179 lat */ = myLoc.getQualifiedCoordinates().getLatitude(); extension */ = myBlackBerryLoc.getQualifiedCoordinates().getLatitude();

Activar y poner en cola los Servicios de ubicacin en el dispositivo


La opcin Servicios de ubicacin en el dispositivo BlackBerry controla la disponibilidad de los datos de ubicacin. Si la opcin Servicios de ubicacin est activada, podr recuperar la informacin de ubicacin de cualquier fuente de ubicacin disponible (receptor GPS interno, receptor GPS externo y geoubicacin). Si la opcin Servicios de ubicacin est desactivada, la informacin de ubicacin no estar disponible. Puede comprobar si la opcin Servicios de ubicacin est activada invocando LocationInfo.isLocationOn(), proporcionado en el paquete net.rim.device.api.gps. Si la opcin no est activada, podr activarla mediante programacin invocando LocationInfo.setLocationOn(). Para activar la opcin Servicios de ubicacin, su aplicacin debe estar firmada y tener permisos para cambiar la configuracin del dispositivo. Asegrese de que la aplicacin solicita al usuario del dispositivo BlackBerry permiso para activar los servicios de ubicacin. Al invocar setLocationOn(), tienen lugar las acciones siguientes: Si la opcin Servicios de ubicacin est desactivada, la opcin se activa y los datos de ubicacin del GPS pasan a estar disponibles, si el dispositivo es compatible con la tecnologa GPS y la poltica de TI de BlackBerry Enterprise Server permite el acceso a la caracterstica de GPS Los datos de ubicacin del servicio de geoubicacin pasan a estar disponibles, si la opcin Servicios de ubicacin en el dispositivo BlackBerry est activada, la poltica de TI de BlackBerry Enterprise Server permite el acceso al servicio de geoubicacin y el proveedor de servicios inalmbricos permite el acceso al servicio Para receptores GPS externos, los datos de ubicacin pasan a estar disponibles si el receptor externo se especifica como la fuente de datos de GPS actual (en las Opciones del dispositivo) Nota: No es posible desactivar mediante programacin la opcin Servicios de ubicacin. Slo el usuario puede desactivar esta opcin.

Gua de desarrollo

Consultar las fuentes de ubicacin

Consultar las fuentes de ubicacin


Los datos de ubicacin se pueden recuperar utilizando varias fuentes de ubicacin, por ejemplo, un receptor GPS interno, un receptor GPS externo, o un servicio de geoubicacin. Antes de recuperar los datos de ubicacin, debe comprobar con qu fuentes de ubicacin es compatible el dispositivo BlackBerry y si la fuente de ubicacin est disponible. Puede que la fuente de ubicacin no sea compatible por las razones siguientes: La fuente de ubicacin no es compatible con el hardware del dispositivo. La fuente de ubicacin ha sido desactivada por el proveedor de servicios inalmbricos (no hay libro de servicios). Si la conexin de red mvil est desactivada, la fuente de ubicacin para la geoubicacin de la estacin base no ser compatible pero la fuente de ubicacin para GPS s lo es, no obstante, puede tardar en detectar la primera posicin. Si la conexin Wi-Fi est desactivada, la fuente de ubicacin para geoubicacin mediante el uso de puntos de acceso de WLAN no ser compatible. Si hay insuficiente conectividad de red, la fuente de ubicacin de geoubicacin no ser compatible.

Hay disponible una fuente de ubicacin si todas las opciones de configuracin estn activadas para la fuente. Sin embargo, aunque la fuente de ubicacin sea compatible, podra no estar disponible en el dispositivo (por ejemplo, el usuario del dispositivo BlackBerry ha desactivado la fuente de ubicacin). Las fuentes de ubicacin se definen como constantes en las clases GPSInfo y LocationInfo. Las constantes pueden ser cualquiera de los valores siguientes:
GPSInfo.GPS_DEVICE_INTERNAL GPSInfo.GPS_DEVICE_BLUETOOTH LocationInfo.LOCATION_SOURCE_GEOLOCATION LocationInfo.LOCATION_SOURCE_GEOLOCATION_CELL LocationInfo.LOCATION_SOURCE_GEOLOCATION_WLAN

Puede consultar las fuentes de la ubicacin utilizando los siguientes mtodos definidos en la clase net.rim.device.api.gps.LocationInfo: Mtodo
getSupportedLocationSources()

isLocationSourceSupported(int mode) getAvailableLocationSources()

Descripcin Este mtodo devuelve una mscara de nmero entero que representa las fuentes de ubicacin con las que es compatible el dispositivo. Este mtodo devuelve un valor de true si la fuente que ha especificado es compatible con el dispositivo. Este mtodo devuelve una mscara de nmero entero que representa las fuentes de ubicacin con las que es compatible el dispositivo. Hay disponible una fuente de ubicacin si es compatible y est activada para su uso.

Gua de desarrollo

Especificar el modo GPS

Mtodo
isLocationSourceAvailable(int mode)

Descripcin Este mtodo devuelve un valor de true si el modo que ha especificado est disponible para proporcionar informacin de ubicacin.

Ejemplo de cdigo: comprobar si las fuentes de ubicacin son compatibles


int locationCapability = LocationInfo.getSupportedLocationSources(); boolean gps = (locationCapability & (GPSInfo.GPS_DEVICE_INTERNAL | GPSInfo.GPS_DEVICE_BLUETOOTH)) != 0

Ejemplo de cdigo: comprobar si hay disponibles fuentes de ubicacin


if (LocationInfo.getAvailableLocationSources() != 0)

Especificar el modo GPS


Debe especificar el modo GPS para recuperar la ubicacin de un dispositivo BlackBerry. Entre los modos GPS, se encuentran autnomo, asistido y estacin base. El modo autnomo depende slo de satlites GPS. El modo asistido depende de satlites GPS y servidores de la red inalmbrica. El modo estacin base depende del servicio de geoubicacin o de la red inalmbrica para ofrecer informacin de la ubicacin de la estacin base actual.

Modos GPS
La aplicacin del dispositivo BlackBerry debe comprobar que existe un modo GPS disponible para su uso en cada dispositivo BlackBerry en el que se ejecute, antes de poder utilizarlo. Modo GPS estacin base Descripcin Este modo utiliza la red inalmbrica para lograr el primer punto de posicin GPS y, generalmente, se considera el modo ms rpido. Este modo no ofrece informacin de seguimiento al dispositivo BlackBerry como la velocidad y el rumbo. Este modo utiliza el receptor GPS del dispositivo BlackBerry para recuperar informacin de la ubicacin. Este modo no puede utilizarse en interiores ni muy cerca de numerosos obstculos fsicos y puede tardar varios minutos en sincronizarse completamente con cuatro satlites o ms para lograr el primer punto de posicin GPS. Este modo utiliza la red inalmbrica para recuperar informacin del satlite. Este modo puede lograr una recuperacin rpida del primer punto de posicin GPS.

autnomo

asistido

Gua de desarrollo

Especificar el modo GPS utilizando JSR 179

Modo GPS basado en MS

Descripcin Este modo utiliza la red inalmbrica para recuperar informacin del satlite. Despus del primer punto de posicin GPS, el dispositivo BlackBerry se basa en el modo autnomo para recuperar de forma ms precisa posteriores puntos de posicin GPS. El modo GPS basado en MS se aplica a dispositivos BlackBerry que utilizan Qualcomm gpsOne y operan en la red CDMA. asistido por MS Este modo utiliza la red inalmbrica para recuperar informacin del satlite. Este modo se aplica a dispositivos BlackBerry que utilizan Qualcomm gpsOne y operan en la red CDMA. ptimo en velocidad Este modo se centra en ofrecer el punto de posicin GPS ms rpido posible que cumpla los criterios establecidos por la aplicacin. Este modo se aplica a dispositivos BlackBerry que utilizan Qualcomm gpsOne y operan en la red CDMA. ptimo en precisin Este modo se determina en funcin de la precisin de un punto de posicin GPS. Este modo se basa en la informacin de la red o bien realiza los clculos locales, dependiendo de lo que sea ms preciso y est ms disponible. Este modo se aplica a dispositivos BlackBerry que utilizan Qualcomm gpsOne y operan en la red CDMA. ptimo en datos Este modo se determina basndose en la cantidad de trfico de red mnima que requiere un punto de posicin GPS. Este modo se basa en la informacin de la red o bien realiza los clculos locales, dependiendo de lo que est disponible que utilice el menor volumen de trfico de datos posible. Este modo se aplica a dispositivos BlackBerry que utilizan Qualcomm gpsOne y operan en la red CDMA. GPS con Bluetooth Este modo se determina mediante la configuracin del dispositivo GPS con Bluetooth. La configuracin de un dispositivo GPS con Bluetooth que est sincronizado con un dispositivo BlackBerry no puede especificarse en un objeto Criteria.

Especificar el modo GPS utilizando JSR 179


Si utiliza el paquete JSR 179, debe especificar las propiedades del modo GPS en la clase javax.microedition.location.Criteria. La aplicacin no puede establecer el modo GPS directamente. Si un dispositivo BlackBerry est sincronizado con un dispositivo GPS con Bluetooth para determinar la ubicacin, se utilizar el dispositivo con Bluetooth independientemente de cmo se haya configurado el objeto Criteria.

Especificar el modo GPS (JSR 179)


La API de ubicacin JSR 179 es compatible con dispositivos BlackBerry que ejecutan BlackBerry Device Software versin 4.0.2 o posterior. 1. 2. Importe la clase necesaria.
import javax.microedition.location.Criteria;

Cree una clase y un constructor.


public class handleGPS { public handleGPS()

Gua de desarrollo

Especificar el modo GPS utilizando JSR 179

{ }

3.

En el constructor, cree una instancia de la clase Criteria. Cree una variable para especificar un modo GPS.
Criteria myCriteria = new Criteria(); int myMode = 2; // AUTONOMOUS

4.

En el constructor, asigne las propiedades para cada modo GPS invocando el correspondiente mtodo de configuracin para cada propiedad.
switch ( myMode ) { case 0: // CELLSITE myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW); myCriteria.setHorizontalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setVerticalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setCostAllowed(true); break; case 1: // ASSIST myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_MEDIUM); myCriteria.setHorizontalAccuracy(100); myCriteria.setVerticalAccuracy(100); myCriteria.setCostAllowed(true); break; case 2: // AUTONOMOUS myCriteria.setCostAllowed(false); break; }

Propiedades de asignacin de criterios


Si utiliza la API de ubicacin JSR 179 para especificar un modo GPS, debe asignar las propiedades siguientes a la clase Criteria. Nivel de consumo de energa cualquiera medio, alto o no necesario medio, alto o no necesario alto Frecuencia del punto de posicin individual o mltiple individual o mltiple individual o mltiple varios

Modo GPS Autnomo Autnomo asistido u ptimo en datos asistido u ptimo en velocidad
10

Precisin horizontal required no necesario no necesario

Precisin vertical required no necesario no necesario

Coste permitido no no s

Tiempo de respuesta cualquiera cualquiera cualquiera

required

required

calidad del servicio

Gua de desarrollo

Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179

Modo GPS asistido o basado en MS asistido u ptimo en precisin asistido o asistido MS Estacin base

Precisin horizontal required required

Precisin vertical required required

Coste permitido s s

Nivel de consumo de energa medio o no necesario alto

Tiempo de respuesta calidad del servicio calidad del servicio calidad del servicio cualquiera

Frecuencia del punto de posicin varios sencillo

required no necesario

required no necesario

s s

medio o no necesario bajo

sencillo cualquiera

Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179
Las extensiones de BlackBerry para JSR 179 ofrecen un conjunto mejorado de criterios GPS. La clase net.rim.device.api.gps.BlackBerryCriteria extiende la clase javax.microedition.location.Criteria. Puede utilizar los mtodos de la clase BlackBerryCriteria para especificar los requisitos GPS de su aplicacin. Mtodo
setMode (int) setFailoverMode (int, int, int) setSubsequentMode (int)

setGPSRestartInterval (int, int)

setSatelliteInfoRequired (boolean, boolean)

Descripcin Puede utilizar este mtodo para especificar un modo GPS inicial cuando cree un objeto BlackBerryCriteria. Puede utilizar este mtodo para especificar un modo GPS en caso de error para utilizarlo cuando el modo GPS inicial no funcione. Este mtodo se aplica slo a la funcionalidad GPS interna de un dispositivo BlackBerry. Puede utilizar este mtodo para especificar un modo GPS posterior que se utilizar despus de haber recuperado correctamente un primer punto de posicin GPS. Puede utilizar este mtodo para especificar un intervalo de espera antes de reiniciar automticamente el proceso de recuperacin de GPS cuando no se recupere correctamente un punto de posicin GPS. Puede especificar intervalos de hasta un mximo de 15 minutos y un mnimo de 2 segundos, con un lmite de tres reintentos automticos. Puede utilizar este mtodo para especificar si desea informacin de seguimiento del satlite. La informacin de seguimiento del satlite consta del nmero de satlites que ve y sus identificaciones, la calidad de la seal, la elevacin y el acimut. Esto se aplica slo a la funcionalidad GPS interna de un dispositivo BlackBerry.

11

Gua de desarrollo

Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179

Especificar el modo GPS utilizando las extensiones de BlackBerry para JSR 179
Las extensiones de BlackBerry para JSR 179 son compatibles con dispositivos BlackBerry que ejecutan BlackBerry Device Software versin 5.0.0 o posterior. 1. 2. Importe la clase necesaria.
import net.rim.device.api.gps.*;

Cree una clase y un constructor.


public class handleGPS { BlackBerryCriteria myCriteria; public handleGPS() { } }

3.

En el constructor, cree un bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryCriteria pasando el modo GPS como parmetro al constructor.
try {

myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST); } catch ( UnsupportedOperationException ex ) { return; }

4.

En el constructor, invoque setFailloverMode() para especificar el modo GPS que se utilizar en caso de error si el primer modo GPS que especifica no puede recuperar un punto de posicin GPS. Invoque setSubsequentMode() para especificar un modo GPS posterior para utilizarlo despus de haber recuperado correctamente un primer punto de posicin.
myCriteria.setFailoverMode(GPSInfo.GPS_MODE_AUTONOMOUS, 3, 100); myCriteria.setSubsequentMode(GPSInfo.GPS_MODE_AUTONOMOUS);

5.

Para comprobar si se admite un modo GPS, invoque GPSInfo.isGPSModeAvailable() y pase el modo GPS como parmetro. Invoque setMode() para especificar el modo GPS, si ste es compatible.
public class handleGPS { public handleGPS() { BlackBerryCriteria myCriteria = new BlackBerryCriteria(); if (GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_ASSIST)) myCriteria.setMode(GPSInfo.GPS_MODE_ASSIST); else if (GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_AUTONOMOUS)) myCriteria.setMode(GPSInfo.GPS_MODE_AUTONOMOUS); } }

12

Gua de desarrollo

Recuperar la informacin de la ubicacin utilizando el modo GPS asistido

Recuperar la informacin de la ubicacin utilizando el modo GPS asistido


Modo asistido mediante un servidor PDE
El modo asistido puede utilizarse con dispositivos BlackBerry que estn asociados a una red CDMA que use una tecnologa de servidor PDE. El modo asistido est destinado a ofrecer la recuperacin rpida de un punto de posicin GPS. Actualmente, las capacidades GPS asistidas las definen los proveedores de servicios inalmbricos. En muchas ocasiones, hay que entablar una relacin formal con proveedores de servicios inalmbricos para poder conectarse a su servidor PDE.

Comprobar que se requiere informacin del servidor PDE


Antes de utilizar el modo asistido con un servidor PDE, debe comprobar si se requiere informacin del servidor PDE. 1. 2. Importe la clase necesaria.
import net.rim.device.api.gps.GPSSettings;

Cree una clase y un constructor. En el constructor, invoque isPDEInfoRequired() para comprobar si necesita especificar la informacin del servidor PDE para utilizar el modo asistido.
public class checkPDE { public checkPDE() { if ( isPDEInfoRequired(GPSInfo.GPS_MODE_ASSIST)) { // set up PDE server access } } }

Especificar informacin del servidor PDE


Antes de comenzar: Debe tener la identificacin de usuario, la contrasea, la direccin IP y el nmero de puerto que utilice el proveedor de servicios inalmbricos para su servidor PDE. 1. Importe las clases necesarias.
import net.rim.device.api.gps.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor.

13

Gua de desarrollo

Recuperar la informacin de la ubicacin utilizando el modo GPS asistido

public class handleGPS { static GPSThread gpsThread; public handleGPS() { } }

3.

En el constructor, cree e inicie una instancia de la clase Thread.


gpsThread = new GPSThread(); gpsThread.start();

4.

En la clase, cree una clase esttica privada que ample Thread y cree un mtodo run().
private static class GPSThread extends Thread { public void run() { } }

5.

En el mtodo run() de la clase privada, invoque isGPSModeAvailable() pasando GPS_MODE_ASSIST como parmetro para determinar si est disponible el modo asistido en el dispositivo BlackBerry. Invoque isPDEInfoRequired() para determinar si necesita especificar informacin de servidor PDE. Si se requiere informacin del servidor PDE, cree una instancia de la clase BlackBerryCriteria pasando GPS_MODE_ASSIST como parmetro al constructor.
if ( !GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_ASSIST) || !GPSSettings.isPDEInfoRequired(GPSInfo.GPS_MODE_ASSIST)) return; BlackBerryCriteria myCriteria = new BlackBerryCriteria (GPSInfo.GPS_MODE_ASSIST);

6.

En el mtodo run() de la clase privada, cree un bloque try/catch. En el bloque, asocie una instancia de la clase BlackBerryCriteria con un objeto BlackBerryLocationProvider. Cree y especifique los objetos String de direccin IP, contrasea e identificacin del usuario,as como la identificacin del puerto. Combine los objetos String en un nico String. Invoque setPDEInfo() para especificar la direccin IP del servidor PDE y el nmero de puerto del dispositivo BlackBerry.
try {

BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); String user = "UserID"; String pass = "Password"; String ip = "127.0.0.1"; int port = 0; String str = ip + ";" + user + ";" + pass; GPSSettings.setPDEInfo(str, port); try { BlackBerryLocation myLocation = (BlackBerryLocation)myProvider.getLocation(10);

14

Gua de desarrollo

Recuperar la informacin de la ubicacin utilizando el modo GPS asistido

} catch ( LocationException lex ) {} return;

} catch ( InterruptedException iex ) {} catch ( LocationException lex ) {}

Ejemplo de cdigo: Especificar la informacin del servidor PDE


import net.rim.device.api.gps.*; import javax.microedition.location.*; public class handleGPS { static GPSThread gpsThread; public handleGPS() { gpsThread = new GPSThread(); gpsThread.start(); } private static class GPSThread extends Thread { public void run() { if ( !GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_ASSIST) || !GPSSettings.isPDEInfoRequired(GPSInfo.GPS_MODE_ASSIST)) return; BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); String user = "UserID"; String pass = "Password"; String ip = "127.0.0.1"; int port = 0; String str = ip + ";" + user + ";" + pass; GPSSettings.setPDEInfo(str, port); try { BlackBerryLocation myLocation = (BlackBerryLocation)myProvider.getLocation(10); } catch ( InterruptedException iex ) { return; } catch ( LocationException lex ) { return; } 15

Gua de desarrollo

Recuperar un proveedor de ubicacin

} catch ( LocationException lex ) { return; } return;

Recuperar un proveedor de ubicacin


Despus de especificar el modo GPS, debe recuperar el proveedor de ubicacin que su aplicacin utiliza para admitir el modo GPS. Un proveedor de ubicacin representa la fuente de la informacin de ubicacin y funciona basndose en criterios dados (por ejemplo: la precisin horizontal y el uso de energa). Si la aplicacin utiliza la clase Criteria del paquete JSR 179 para especificar un modo GPS, la aplicacin debe recuperar una instancia de la clase LocationProvider. Si la aplicacin utiliza la clase BlackBerryCriteria, la aplicacin debe recuperar una instancia de la clase BlackBerryLocationProvider. Un objeto BlackBerryLocationProvider ampla la clase javax.microedition.location.LocationProvider. Puede utilizar BlackBerryLocationProvider para realizar las acciones siguientes: Procesar una solicitud de ubicacin que haya especificado en el objeto net.rim.device.api.gps.BlackBerryCriteria. Poner en pausa el servicio de escucha de la ubicacin y volver a activarlo. Recuperar el tipo de servicio de escucha GPS incluido un servicio de escucha GPS con Bluetooth o interno.

Cuando el servicio de escucha de la ubicacin est en pausa, la aplicacin no recibe ningn punto de posicin GPS. El servicio de escucha de la ubicacin puede estar en un estado preparado mientras est en pausa.

Recuperar un proveedor de ubicacin utilizando la clase LocationProvider


1. 2. Importe las clases necesarias.
import javax.microedition.location.*;

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

En el constructor, cree una instancia de la clase Criteria.


Criteria myCriteria = new Criteria();

16

Gua de desarrollo

Recuperar un proveedor de ubicacin

4.

En el constructor, configure el objeto Criteria para utilizar el modo GPS especificado. En el ejemplo de cdigo siguiente, se especifica el modo autnomo invocando setCostAllowed(false).
int myMode = 2; // AUTONOMOUS switch ( myMode ) { case 0: // CELLSITE myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW); myCriteria.setHorizontalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setVerticalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setCostAllowed(true); break; case 1: // ASSIST myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_MEDIUM); myCriteria.setHorizontalAccuracy(100); myCriteria.setVerticalAccuracy(100); myCriteria.setCostAllowed(true); break; case 2: // AUTONOMOUS myCriteria.setCostAllowed(false); break; }

5.

En el constructor, cree un bloque try/catch. Dentro del bloque, cree un objeto LocationProvider invocando getInstance().
try {

} catch ( LocationException lex ) { return; }

LocationProvider myProvider = LocationProvider.getInstance(myCriteria);

Ejemplo de cdigo: Recuperar un proveedor de ubicacin utilizando la clase LocationProvider


import javax.microedition.location.*; public class handleGPS { public handleGPS() { Criteria myCriteria = new Criteria(); int myMode = 2; // AUTONOMOUS switch ( myMode ) { case 0: // CELLSITE myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW); myCriteria.setHorizontalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setVerticalAccuracy(Criteria.NO_REQUIREMENT); myCriteria.setCostAllowed(true); break; case 1: // ASSIST myCriteria.setPreferredPowerConsumption(Criteria 17

Gua de desarrollo

Recuperar un proveedor de ubicacin

.POWER_USAGE_MEDIUM); myCriteria.setHorizontalAccuracy(100); myCriteria.setVerticalAccuracy(100); myCriteria.setCostAllowed(true); break; case 2: // AUTONOMOUS myCriteria.setCostAllowed(false); break; } try { LocationProvider myProvider = LocationProvider.getInstance(myCriteria); } catch ( LocationException lex ) { return; } }

Controlar el rastreo de ubicaciones utilizando la clase BlackBerryLocationProvider


La clase net.rim.device.api.gps.BlackBerryLocationProvider extiende la clase javax.microedition.location.LocationProvider y es necesaria para aplicaciones del dispositivo BlackBerry que utilizan las extensiones de BlackBerry a JSR 179. Puede utilizar los mtodos que se ofrecen en la clase BlackBerryLocationProvider para controlar el rastreo de ubicaciones. Mtodo
getProviderType() pauseLocationTracking (int interval)

resumeLocationTracking() stopLocationTracking()

Descripcin Este mtodo recupera la fuente de la informacin de ubicacin. La fuente es un receptor GPS interno o externo. Este mtodo pone en pausa el rastreo de ubicaciones y detiene la recepcin de puntos de posicin GPS. Puede pasar un parmetro de intervalo, especificado en segundos, para asegurarse de que el receptor GPS siga activo durante el intervalo de la pausa. Puede pasar un intervalo de 0 para detener indefinidamente el rastreo de ubicaciones e inactivar el receptor GPS. Este mtodo reanuda el rastreo de ubicaciones despus de haber estado en pausa. Este mtodo detiene el rastreo de ubicaciones slo si anteriormente se haba iniciado el rastreo. Su aplicacin debe invocar BlackBerryLocationProvider.reset() antes de que se reinicie el rastreo de ubicaciones utilizando el mismo proveedor de ubicacin.

18

Gua de desarrollo

Recuperar un proveedor de ubicacin

Controlar el rastreo de ubicaciones utilizando la clase BlackBerryLocationProvider


Puede pausar, reanudar y detener el rastreo de ubicaciones mediante la clase net.rim.device.api.gps.BlackBerryLocationProvider. 1. Importe las clases necesarias.
import net.rim.device.api.gps.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor nuevos.


public class handleGPS { static BlackBerryLocationProvider myProvider; public handleGPS() { } }

3.

En el constructor, cree un bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryCriteria pasando el modo GPS como parmetro al constructor.
try {

} catch ( UnsupportedOperationException uoex ) { return; }

BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_AUTONOMOUS);

4.

En la parte try del bloque, cree un bloque try/catch nuevo. En este bloque, cree una instancia de la clase BlackBerryLocationProvider recuperando una instancia de la clase BlackBerryCriteria. Invoque setLocationListener() pasando el valor del intervalo, el valor de tiempo de espera y la edad mxima como parmetros para agregar un LocationListener.
try {

} catch ( LocationException lex ) { return; } myProvider.pauseLocationTracking(30); myProvider.resumeLocationTracking(); myProvider.stopLocationTracking();

myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); myProvider.setLocationListener(new handleGPSListener(), 10, -1, -1);

19

Gua de desarrollo

Recuperar un proveedor de ubicacin

5.

Fuera del bloque try/catch, invoque pauseLocationTracking(), resumeLocationTracking(), o stopLocationTracking() para pausar, reanudar o detener l rastreo de ubicaciones.
myProvider.pauseLocationTracking(30); myProvider.resumeLocationTracking(); myProvider.stopLocationTracking();

6.

En la clase, implemente la interfaz LocationListener. Implemente el marco bsico para el mtodo locationUpdated() y el mtodo providerStateChanged().
public static class handleGPSListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if (location.isValid()) {} else {} } public void providerStateChanged(LocationProvider provider, int newState) { if (newState == LocationProvider.AVAILABLE) {} else if (newState == LocationProvider.OUT_OF_SERVICE) {} else if (newState == LocationProvider.TEMPORARILY_UNAVAILABLE ) {} } }

Ejemplo de cdigo: Utilizar la clase BlackBerryLocationProvider para controlar el rastreo de ubicaciones


import net.rim.device.api.gps.*; import javax.microedition.location.*; public class handleGPS { static BlackBerryLocationProvider myProvider; public handleGPS() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_AUTONOMOUS); try { myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); myProvider.setLocationListener(new handleGPSListener(), 10, -1, -1); } catch ( LocationException lex ) { return; } 20

Gua de desarrollo

Recuperar un proveedor de ubicacin

} public static class handleGPSListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if (location.isValid()) { // do something } else { // invalid location } } public void providerStateChanged(LocationProvider provider, int newState) { if (newState == LocationProvider.AVAILABLE) { // available } else if (newState == LocationProvider.OUT_OF_SERVICE) { // GPS unavailable due to IT policy specification } else if (newState == LocationProvider.TEMPORARILY_UNAVAILABLE ) { // no GPS fix } } }

} catch ( UnsupportedOperationException uoex ) { return; } return;

myProvider.pauseLocationTracking(30); myProvider.resumeLocationTracking(); myProvider.stopLocationTracking();

Recuperar un proveedor de ubicacin utilizando la clase BlackBerryLocationProvider


1. Importe las clases necesarias.
import net.rim.device.api.gps.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor.


public class handleGPS { static BlackBerryCriteria myCriteria; public handleGPS() 21

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

{ }

3.

En el constructor, cree un bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryCriteria y pase el modo GPS al constructor. Cree un segundo bloque try/catch, a continuacin cree una instancia de la clase BlackBerryLocationProvider invocando getInstance() para recuperar una instancia del objeto BlackBerryCriteria.
try {

} catch ( UnsupportedOperationException ex ) { return; }

myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); } catch ( LocationException lex ) { return; }

Recuperar la ubicacin de un dispositivo BlackBerry


Puede recuperar la ubicacin de un dispositivo BlackBerry especificando un solo punto de posicin GPS o especificando un servicio de escucha de la ubicacin para recuperar puntos de posicin GPS continuos.

Recuperar la ubicacin de un dispositivo BlackBerry


1. 2. Importe las clases necesarias.
import javax.microedition.location.*;

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

Declare campos estticos en la clase.

22

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

static GPSThread gpsThread; static double latitude; static double longitude;

4.

En el constructor, cree e inicie un subproceso local.


gpsThread = new GPSThread(); gpsThread.start();

5.

En la clase, cree una clase privada que ample Thread y cree un mtodo run().
private class GPSThread extends Thread { public void run() { } }

6.

En el mtodo run(), cree una instancia de la clase Criteria. Invoque setCostAllowed(false) para especificar el modo autnomo.
Criteria myCriteria = new Criteria(); myCriteria.setCostAllowed(false);

7.

En el mtodo run(), cree un bloque try/catch. En el bloque, cree un objeto LocationProvider obteniendo una instancia del objeto Criteria. Cree otro bloque try/catch para crear un objeto Location a fin de solicitar la ubicacin actual del dispositivo BlackBerry y especifique el periodo de tiempo de espera en segundos. Cuando el mtodo getLocation() sea devuelto, solicite las coordenadas de latitud y longitud.
try {

} catch ( LocationException lex ) { return; } return;

LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); try { Location myLocation = myLocationProvider.getLocation(300); latitude = myLocation.getQualifiedCoordinates().getLatitude(); longitude = myLocation.getQualifiedCoordinates().getLongitude(); } catch ( InterruptedException iex ) { return; } catch ( LocationException lex ) { return; }

23

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

Ejemplo de cdigo: Recuperar la ubicacin GPS de un dispositivo BlackBerry


import javax.microedition.location.*; public class handleGPS { static GPSThread gpsThread; static double latitude; static double longitude; public handleGPS() { gpsThread = new GPSThread(); gpsThread.start(); } private static class GPSThread extends Thread { public void run() { Criteria myCriteria = new Criteria(); myCriteria.setCostAllowed(false); try { LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); try { Location myLocation = myLocationProvider.getLocation(300); latitude = myLocation.getQualifiedCoordinates().getLatitude(); longitude = myLocation.getQualifiedCoordinates().getLongitude(); } catch ( InterruptedException iex ) { return; } catch ( LocationException lex ) { return; } } catch ( LocationException lex ) { return; } return; } } }

24

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

Recuperar la ubicacin de un dispositivo BlackBerry especificando solicitudes continuas del punto de posicin
Puede utilizar la API de ubicacin para recuperar informacin de la ubicacin de un dispositivo BlackBerry en cualquier intervalo. 1. 2. Importe las clases e interfaz necesarias.
import javax.microedition.location.*;

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

En el constructor, cree una instancia de la clase Criteria. Cree un bloque try/catch. En este bloque, cree una instancia de la clase LocationProvider invocando getInstance() y utilizando el objeto Criteria. Invoque setLocationListener() para especificar la ubicacin del servicio de escucha de eventos GPS.
Criteria myCriteria = new Criteria(); try { LocationProvider provider = LocationProvider.getInstance(myCriteria); provider.setLocationListener(new handleGPSListener(), 10, -1, -1); } catch ( LocationException lex ) { return; }

4.

En la clase, implemente la interfaz LocationListener. Debe agregar la funcionalidad que sea necesaria a esta implementacin.
public static class handleGPSListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if (location.isValid()) { // do something } else { // invalid locatuon } } public void providerStateChanged(LocationProvider provider, int newState) { if (newState == LocationProvider.OUT_OF_SERVICE) {} else if (newState == Location.TEMPORARILY_UNAVAILABLE ) 25

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

{}

Ejemplo de cdigo: Recuperar la ubicacin GPS de un dispositivo BlackBerry utilizando solicitudes continuas del punto de posicin
import javax.microedition.location.*; public class handleGPS { public handleGPS() { Criteria myCriteria = new Criteria(); try { LocationProvider provider = LocationProvider.getInstance(myCriteria); provider.setLocationListener(new handleGPSListener(), 10, -1, -1); } catch ( LocationException lex ) { return; } } public static class handleGPSListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if (location.isValid()) { // do something } else { // invalid location } } public void providerStateChanged(LocationProvider provider, int newState) { if (newState == LocationProvider.OUT_OF_SERVICE) { // GPS unavailable due to IT policy specification } else if (newState == LocationProvider.TEMPORARILY_UNAVAILABLE ) { // no GPS fix } } } }

26

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

Recuperar la informacin de la ubicacin utilizando la clase Location


Puede utilizar la API de ubicacin JSR 179, que se ofrece en el paquete javax.microedition.location.Location, para recuperar la informacin siguiente: la latitud como un valor double la longitud como un valor double velocidad en tierra del dispositivo BlackBerry, en metros por segundo el rumbo del dispositivo BlackBerry, en grados respecto al norte geogrfico la marca de tiempo del punto de posicin GPS la instruccin NMEA que contiene el nmero de satlites que sigue un dispositivo BlackBerry

Recuperar informacin de la ubicacin utilizando la clase Location


Puede solicitar un punto de posicin GPS y despus, recuperar la latitud, la longitud, la velocidad, el rumbo, la marca de tiempo y el nmero de satlites que est rastreando el dispositivo BlackBerry. 1. 2. Importe las clases necesarias.
import javax.microedition.location.*;

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

En la clase, declare campos estticos para un subproceso y para cada elemento de informacin de la ubicacin que recupere.
static static static static static static static GPSThread gpsThread; double latitude; double longitude; float heading; float velocity; long timeStamp; String nmeaString;

4.

En el constructor, cree e inicie un subproceso.


gpsThread = new GPSThread(); gpsThread.start();

5.

En la clase, cree una clase esttica privada que ample Thread y cree un mtodo run().
private static class GPSThread extends Thread { public void run()

27

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

{ }

6.

En run(), cree una instancia de la clase Criteria. Invoque setCostAllowed(false) para especificar el modo autnomo.
Criteria myCriteria = new Criteria(); myCriteria.setCostAllowed(false);

7.

Enrun(), cree un bloque try/catch. En este bloque, cree una instancia de la clase LocationProvider recuperando una instancia del objeto Criteria. Cree un bloque try/catch dentro de este bloque y cree una instancia de la clase Location para recuperar el punto de posicin GPS actual incluyendo un tiempo de espera mximo de 300 segundos. Rellene los campos y especifique el nmero de satlites invocando getExtraInfo ("application/X-jsr179-location-nmea").
try {

} catch ( LocationException lex ) {} return;

LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); try { Location myLocation = myLocationProvider.getLocation(300); latitude = myLocation.getQualifiedCoordinates().getLatitude(); longitude = myLocation.getQualifiedCoordinates().getLongitude(); velocity = myLocation.getSpeed(); heading = myLocation.getCourse(); timeStamp = myLocation.getTimestamp(); nmeaString = myLocation.getExtraInfo ("application/X-jsr179-location-nmea"); } catch ( InterruptedException iex ) {} catch ( LocationException lex ) {}

Ejemplo de cdigo: Utilizar la clase Location para recuperar informacin de la ubicacin GPS
import javax.microedition.location.*; public class handleGPS { static GPSThread gpsThread; static double latitude; static double longitude; static float heading; static float velocity; static long timeStamp; static String nmeaString;

28

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

public handleGPS() { gpsThread = new GPSThread(); gpsThread.start(); } private static class GPSThread extends Thread { public void run() { Criteria myCriteria = new Criteria(); myCriteria.setCostAllowed(false); try { LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); try { Location myLocation = myLocationProvider.getLocation(300); latitude = myLocation.getQualifiedCoordinates().getLatitude(); longitude = myLocation.getQualifiedCoordinates().getLongitude(); velocity = myLocation.getSpeed(); heading = myLocation.getCourse(); timeStamp = myLocation.getTimestamp(); nmeaString = myLocation.getExtraInfo ("application/X-jsr179-location-nmea"); } catch ( InterruptedException iex ) { return; } catch ( LocationException lex ) { return; } } catch ( LocationException lex ) { return; } return; } }

Recuperar la informacin de ubicacin utilizando la clase BlackBerryLocation


Puede utilizar las extensiones de BlackBerry para JSR 179 a fin de recuperar informacin de ubicacin acerca del dispositivo BlackBerry. Puede utilizar la clase BlackBerryLocation para recuperar la siguiente informacin: el nmero de satlites que sigue un dispositivo BlackBerry los datos de los satlites que sigue un dispositivo BlackBerry

29

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

la calidad media de la seal de un satlite la fuente de datos que produce el punto de posicin GPS (un receptor GPS interno o externo) el modo GPS que ofrece la informacin de la ubicacin

Recuperar informacin del satlite utilizando la clase BlackBerryLocation


Puede solicitar un punto de posicin GPS, despus recuperar el nmero actual de satlites que ve, los satlites rastreados, la calidad media de la seal del satlite, la fuente de datos GPS (GPS interno o externo) y el modo GPS. 1. Importe las clases necesarias.
import java.util.*; import java.lang.*; import net.rim.device.api.gps.*;

2.

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

En la clase, declare campos estticos para un subproceso y para cada elemento de informacin de la ubicacin que recupere.
static static static static static GPSThread gpsThread; int satCount; int signalQuality; int dataSource; int gpsMode;

4.

En el constructor, cree e inicie un subproceso.


gpsThread = new GPSThread(); gpsThread.start();

5.

En la clase, cree una clase esttica privada que ample Thread y un mtodo run().
private static class GPSThread extends Thread { public void run() { } }

6.

En run(), cree un bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryCriteria que especifique el modo GPS. Cree un segundo bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryLocationProvider recuperando una instancia del objeto BlackBerryCriteria.
try {

BlackBerryCriteria myCriteria = new

30

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

BlackBerryCriteria(GPSInfo.GPS_MODE_AUTONOMOUS); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria);

7.

Cree un tercer bloque try/catch que est en el primer bloque try/catch. Cree un objeto BlackBerryLocation para recuperar el punto de posicin GPS incluyendo un tiempo de espera mximo de 300 segundos. Rellene los campos y extraiga la informacin del satlite en un objeto StringBuffer.
try {

} catch ( InterruptedException iex ) {} catch ( LocationException lex ) {}

BlackBerryLocation myLocation = (BlackBerryLocation)myProvider.getLocation(300); satCount= myLocation.getSatelliteCount(); signalQuality = myLocation.getAverageSatelliteSignalQuality(); dataSource = myLocation.getDataSource(); gpsMode = myLocation.getGPSMode(); SatelliteInfo si; StringBuffer sb = new StringBuffer("[Id:SQ:E:A]\n"); String separator = ":"; for (Enumeration e = myLocation.getSatelliteInfo(); e!=null && e.hasMoreElements(); ) { si = (SatelliteInfo)e.nextElement(); sb.append(si.getId() + separator); sb.append(si.getSignalQuality() + separator); sb.append(si.getElevation() + separator); sb.append(si.getAzimuth()); sb.append('\n'); }

Ejemplo de cdigo: Utilizar la clase BlackBerryLocation para recuperar informacin del satlite
import net.rim.device.api.gps.*; import java.util.*; import javax.microedition.location.*; public class handleGPS { static GPSThread gpsThread; static int satCount; static int signalQuality; static int dataSource; static int gpsMode; public handleGPS() { gpsThread = new GPSThread(); gpsThread.start(); 31

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

} private static class GPSThread extends Thread { public void run() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_AUTONOMOUS); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); try { BlackBerryLocation myLocation = (BlackBerryLocation)myProvider.getLocation(300); satCount= myLocation.getSatelliteCount(); signalQuality = myLocation.getAverageSatelliteSignalQuality(); dataSource = myLocation.getDataSource(); gpsMode = myLocation.getGPSMode(); SatelliteInfo si; StringBuffer sb = new StringBuffer("[Id:SQ:E:A]\n"); String separator = ":"; for (Enumeration e = myLocation.getSatelliteInfo(); e!=null && e.hasMoreElements(); ) { si = (SatelliteInfo)e.nextElement(); sb.append(si.getId() + separator); sb.append(si.getSignalQuality() + separator); sb.append(si.getElevation() + separator); sb.append(si.getAzimuth()); sb.append('\n'); } } catch ( InterruptedException iex ) { return; } catch ( LocationException lex ) { return; } } catch ( LocationException lex ) { return; } } catch ( UnsupportedOperationException uoex ) { return; } return;

32

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

Cambiar los criterios para recibir informacin de ubicacin


Puede utilizar una instancia de la clase LocationProvider para cambiar automticamente los criterios que se utilizan para seguir la ubicacin de un dispositivo BlackBerry. 1. Importe las clases e interfaz necesarias.
import net.rim.device.api.gps.GPSInfo; import javax.microedition.location.*;

2.

Cree una clase y un constructor.


public class handleGPS { public handleGPS(int gpsMode) { } }

3.

En la clase, defina campos estticos para el proveedor de ubicacin, la latitud, la longitud, la altitud, la velocidad y el rumbo.
static LocationProvider locationProvider; static double lat, lon; static float alt, spd, crs;

4.

En el constructor, agregue un bloque de cdigo para establecer una instancia LocationProvider y cambiar a un mtodo diferente de seguimiento de la ubicacin. Invoque reset() en el objeto LocationProvider y, a continuacin, establezca el servicio de escucha de ubicaciones en null para deshabilitarlo.
if (locationProvider != null) { locationProvider.reset(); locationProvider.setLocationListener(null, -1, -1, -1); }

5.

En el constructor, cree y configure un objeto Criteria basado en el modo GPS que se pasa como un parmetro al constructor.
Criteria myCriteria = new Criteria(); myCriteria.setPreferredResponseTime(Criteria.NO_REQUIREMENT); myCriteria.setCostAllowed(true); if ( gpsMode == GPSInfo.GPS_MODE_AUTONOMOUS ) { myCriteria.setCostAllowed(false); } else if ( gpsMode == GPSInfo.GPS_MODE_ASSIST ) { myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_MEDIUM); } else 33

Gua de desarrollo

Recuperar la ubicacin de un dispositivo BlackBerry

{ }

myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);

6.

En el constructor, cree un bloque try/catch. En este bloque, cree una instancia de la clase LocationListener invocando getInstance() y pasando el objeto Criteria como un parmetro. Especifique un servicio de escucha de ubicaciones para administrar las actualizaciones de ubicacin GPS.
try {

} catch (Exception err) {}

locationProvider = LocationProvider.getInstance(myCriteria); if (locationProvider != null) { locationProvider.setLocationListener (new myLocationListener(), -1, -1, -1); }

7.

En la clase, cree una clase esttica privada que implemente la interfaz LocationListener. Recupere la informacin de ubicacin actual en el mtodo locationUpdated(). Cree una implementacin bsica del mtodo providerStateChanged() para controlar el estado de LocationProvider.
private static class myLocationListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { lat = location.getQualifiedCoordinates().getLatitude(); lon = location.getQualifiedCoordinates().getLongitude(); alt = location.getQualifiedCoordinates().getAltitude(); spd = location.getSpeed(); crs = location.getCourse(); } public void providerStateChanged(LocationProvider provider, int newState) {} }

Ejemplo de cdigo: Modificar los criterios para recuperar informacin de ubicacin


import net.rim.device.api.gps.GPSInfo; import javax.microedition.location.*; public class handleGPS { static LocationProvider locationProvider; static double lat, lon; static float alt, spd, crs; public static void main(String[] args) { } public handleGPS(int gpsMode) { if (locationProvider != null) 34

Gua de desarrollo

Gestionar errores

} private static class myLocationListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { lat = location.getQualifiedCoordinates().getLatitude(); lon = location.getQualifiedCoordinates().getLongitude(); alt = location.getQualifiedCoordinates().getAltitude(); spd = location.getSpeed(); crs = location.getCourse(); } public void providerStateChanged(LocationProvider provider, int newState) { } }

} Criteria myCriteria = new Criteria(); myCriteria.setPreferredResponseTime(Criteria.NO_REQUIREMENT); myCriteria.setCostAllowed(true); if ( gpsMode == GPSInfo.GPS_MODE_AUTONOMOUS ) { myCriteria.setCostAllowed(false); } else if ( gpsMode == GPSInfo.GPS_MODE_ASSIST ) { myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_MEDIUM); } else { myCriteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW); } try { locationProvider = LocationProvider.getInstance(myCriteria); if (locationProvider != null) { locationProvider.setLocationListener (new myLocationListener(), -1, -1, -1); } } catch (Exception err) { }

locationProvider.reset(); locationProvider.setLocationListener(null, -1, -1, -1);

Gestionar errores
Puede recuperar el ltimo error recibido cuando no se consigue un punto de posicin GPS invocando GPSInfo.getLastGPSError(), disponible en la API de ubicacin JSR 179 o BlackBerryLocation.getError (), disponible en las extensiones de BlackBerry para JSR 179.

35

Gua de desarrollo

Gestionar errores

Administrar errores (JSR 179)


Si una solicitud de punto de posicin GPS no resulta satisfactoria, puede recuperar el ltimo error devuelto. 1. 2. Importe la clase necesaria.
import net.rim.device.api.gps.GPSInfo;

Cree una clase y un constructor.


public class handleGPS { public handleGPS() { } }

3.

En el constructor, invoque GPSInfo.getLastGPSError() para recuperar el error.


switch (GPSInfo.getLastGPSError()) { case GPSInfo.GPS_ERROR_NONE: break; case GPSInfo.GPS_ERROR_ALMANAC_OUTDATED: break; case GPSInfo.GPS_ERROR_AUTHENTICATION_FAILURE: break; case GPSInfo.GPS_ERROR_CHIPSET_DEAD: break; case GPSInfo.GPS_ERROR_DEGRADED_FIX_IN_ALLOTTED_TIME: break; case GPSInfo.GPS_ERROR_GPS_LOCKED: break; case GPSInfo.GPS_ERROR_INVALID_NETWORK_CREDENTIAL: break; case GPSInfo.GPS_ERROR_INVALID_REQUEST: break; case GPSInfo.GPS_ERROR_LOW_BATTERY: break; case GPSInfo.GPS_ERROR_NETWORK_CONNECTION_FAILURE: break; case GPSInfo.GPS_ERROR_NO_FIX_IN_ALLOTTED_TIME: break; case GPSInfo.GPS_ERROR_NO_SATELLITE_IN_VIEW: break; case GPSInfo.GPS_ERROR_PRIVACY_ACCESS_DENIED: break; case GPSInfo.GPS_ERROR_SERVICE_UNAVAILABLE: break; case GPSInfo.GPS_ERROR_TIMEOUT_DEGRADED_FIX_NO_ASSIST_DATA: break; case GPSInfo.GPS_ERROR_TIMEOUT_NO_FIX_NO_ASSIST_DATA: break; }

Administrar errores (extensiones de BlackBerry para JSR 179)


Puede comprobar el estado de una solicitud de punto de posicin GPS invocando el mtodo getStatus() que se ofrece en las extensiones de BlackBerry para JSR 179. Si el valor devuelto es BlackBerryLocation.GPS_ERROR, puede recuperar el valor del error invocando BlackBerryLocation.getError(). 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.gps.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor.

36

Gua de desarrollo

Gestionar errores

public class handleGPS { public handleGPS() { } }

3.

En el constructor, cree un bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryCriteria pasando el modo GPS al constructor.
try {

} catch ( UnsupportedOperationException ex ) { return; }

BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST);

4.

En el bloque try/catch, cree otro bloque try/catch. En este bloque, cree una instancia de la clase BlackBerryLocationProvider recuperando el objeto BlackBerryCriteria. Invoque setLocationListener() para especificar el servicio de escucha de ubicaciones.
try {

} catch ( LocationException lex ) { return; }

BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); myProvider.setLocationListener(new myLocationListener(), -1, -1, -1);

5.

En la clase, cree una clase esttica que implemente LocationListener. Implemente locationUpdated() y providerStateChanged().
private static class myLocationListener implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { } public void providerStateChanged(LocationProvider provider, int newState) { } }

6.

En locationUpdated(), comprueba si el parmetro location es una instancia de BlackBerryLocation. Si es as, cree un objeto BlackBerryLocation local pasando el parmetro location. Invoque getStatus () para recuperar el estado de la solicitud de ubicacin GPS y despus, procese el estado devuelto.
if (location instanceof BlackBerryLocation) { BlackBerryLocation bLoc = (BlackBerryLocation)location;

37

Gua de desarrollo

Gestionar errores

switch(bLoc.getStatus()) { case BlackBerryLocation.GPS_ERROR: int gpsStatus = bLoc.getError(); break; case BlackBerryLocation.FAILOVER_MODE_ON: case BlackBerryLocation.SUBSEQUENT_MODE_ON: case BlackBerryLocation.GPS_FIX_PARTIAL: case BlackBerryLocation.GPS_FIX_COMPLETE: break; }

Ejemplo de cdigo: Administrar errores (extensiones de BlackBerry para JSR 179)


import net.rim.device.api.gps.*; import javax.microedition.location.*; public class handleGPS { public handleGPS() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider) LocationProvider.getInstance(myCriteria); myProvider.setLocationListener (new myLocationListener(), -1, -1, -1); } catch ( LocationException lex ) { return; } } catch ( UnsupportedOperationException ex ) { return; } } private static class myLocationListener implements LocationListener { public void locationUpdated (LocationProvider provider, Location location) { if (location instanceof BlackBerryLocation) { BlackBerryLocation bLoc = (BlackBerryLocation)location; switch(bLoc.getStatus()) { case BlackBerryLocation.GPS_ERROR: int gpsStatus = bLoc.getError();

38

Gua de desarrollo

Recuperar una ubicacin GPS utilizando una pgina Web

case case case case } }

break; BlackBerryLocation.FAILOVER_MODE_ON: BlackBerryLocation.SUBSEQUENT_MODE_ON: BlackBerryLocation.GPS_FIX_PARTIAL: BlackBerryLocation.GPS_FIX_COMPLETE: break;

} public void providerStateChanged (LocationProvider provider, int newState) { }

Recuperar una ubicacin GPS utilizando una pgina Web


El ejemplo de cdigo siguiente muestra cmo determinar si BlackBerry Browser carg una pgina Web y si el dispositivo BlackBerry es compatible con la funcionalidad GPS. Si estas condiciones son verdaderas, la pgina Web recibe informacin de la ubicacin actualizada para iniciar el rastreo de ubicaciones. Ejemplo de cdigo: Recuperar una ubicacin GPS utilizando una pgina Web
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>GPS Testing</title> </head> <body> <script type="text/javascript"> var modeCellsite = 0; var modeAssisted = 1; var modeAutonomous = 2; function locationChanged() { alert("Lat " + blackberry.location.latitude + " Lon " + blackberry.location.longitude + " Time " + blackberry.location.timestamp ); return true; } if ( window.blackberry && blackberry.location.GPSSupported ) { var isUpdated = false; var theCount = 0; alert("Location tracking is supported"); blackberry.location.onLocationUpdate("locationChanged()"); blackberry.location.setAidMode(modeAutonomous); while ( theCount++ < 10 && !isUpdated ) isUpdated = blackberry.location.refreshLocation(); 39

Gua de desarrollo

Recuperar una ubicacin GPS utilizando una pgina Web

} else { }

document.write("Location tracking is not supported");

</script> </body> </html>

Recuperar una ubicacin GPS utilizando una pgina Web


Puede utilizar JavaScript para configurar el modo GPS y determinar la ubicacin actual del dispositivo BlackBerry utilizando BlackBerry Browser. Puede utilizar los mtodos y las propiedades siguientes de JavaScript para acceder a la API de ubicacin desde BlackBerry Browser. Propiedad de JavaScript
blackberry .location .GPSSupported blackberry .location .latitude

blackberry .location .longitude

blackberry .location .timestamp

Descripcin Esta propiedad devuelve true cuando el dispositivo BlackBerry es compatible con GPS. Esta propiedad devuelve la latitud actual, en grados, del dispositivo BlackBerry. Los valores positivos indican latitud Norte y los valores negativos indican latitud Sur. Esta propiedad devuelve la longitud actual, en grados, del dispositivo BlackBerry. Los valores positivos indican longitud Este y los valores negativos indican longitud Oeste Esta propiedad devuelve la hora (en milisegundos desde el epoch) en que se actualiz el objeto blackberry .location. Descripcin Este mtodo especifica qu modo GPS utilizar el dispositivo BlackBerry para determinar la ubicacin GPS. El modo puede ser cualquiera de los valores siguientes: 0 para el modo de estacin base 1 para el modo asistido 2 para el modo autnomo Este mtodo solicita una actualizacin de la ubicacin del dispositivo BlackBerry. Este mtodo es asincrnico, as que la secuencia de comandos contina aunque se haya recibido informacin actualizada de la ubicacin. Para garantizar que la informacin de ubicacin se actualiza antes de leerla, debe

Mtodo de JavaScript
blackberry .location .setAidMode (mode)

blackberry .location .refreshLocation ()

40

Gua de desarrollo

Recuperar una ubicacin GPS utilizando una pgina Web

Mtodo de JavaScript

Descripcin registrar en primer lugar un oyente mediante


blackberry .location .onLocationUpdate() que lee blackberry .location .latitude y blackberry .location .longitude y, a continuacin, llama a refreshLocation().

blackberry .location .onLocationUpdate ("callback")

Este mtodo registra un servicio de escucha que evala una cadena o llama a una funcin siempre que el dispositivo BlackBerry recibe informacin actualizada de la ubicacin. En los dispositivos BlackBerry que ejecuten versiones de BlackBerry Device Software anteriores a la versin 4.6, esta funcin debe pasarse como una cadena evaluada cada vez que se actualiza la ubicacin. En dispositivos BlackBerry que ejecuten BlackBerry Device Software versin 4.6 o posterior, puede pasar una cadena o utilizar el mtodo para registrar una funcin de devolucin de llamada. Una vez que se ha invocado onlocationUpdate(), la devolucin de la llamada se produce siempre que hay una actualizacin de la informacin de ubicacin. Esto puede ser con tanta frecuencia como una vez cada varios segundos. Si ha pasado una funcin al mtodo, puede cancelar la devolucin de la llamada utilizando blackberry.removeLocationUpdate().location. Si ha pasado una cadena, la devolucin de la llamada no puede eliminarse. Este mtodo elimina una funcin de devolucin de llamada registrada anteriormente. Este mtodo slo lo admiten los dispositivos BlackBerry que ejecutan BlackBerryDevice Software versin 4.6 posterior.

blackberry .location .removeLocationUpd ate ()

41

Gua de desarrollo

Descripcin general de la geoubicacin

Descripcin general de la geoubicacin

El servicio de geoubicacin proporciona una ubicacin aproximada del dispositivo BlackBerry mediante la posicin de la antena celular y los puntos de acceso de WLAN. La ubicacin aproximada se encuentra en una distancia de entre 200 metros y 5 kilmetros de la ubicacin del dispositivo cuando se utiliza la posicin de la antena celular, y entre 30 y 500 metros cuando se utilizan los puntos de acceso de WLAN. No se requiere la tecnologa GPS en el dispositivo para que la aplicacin utilice el servicio de geoubicacin, as pues es ideal para las aplicaciones que requieren slo una ubicacin aproximada y que se utilizan en interiores (por ejemplo, las aplicaciones que recomiendan puntos locales de inters). Al recuperar informacin de ubicacin del servicio de geoubicacin, la informacin de la antena celular y los puntos de acceso de WLAN se almacena de forma local en el dispositivo. La prxima vez que intente recuperar informacin de ubicacin, la cach se comprobar en primer lugar y si la ubicacin es la mismo, los datos se devolvern desde la cach. El acceso a la cach ayudar a minimizar el uso del ancho de banda y a ofrecer respuestas ms rpidas. El usuario del dispositivo BlackBerry puede controlar el acceso al servicio de geoubicacin en las opciones del dispositivo, a travs de una poltica de TI en BlackBerry Enterprise Server o bien a travs del proveedor de servicios inalmbricos. La geoubicacin de antena celular es compatible con los dispositivos que ejecutan BlackBerry Device Software 5.0 o posterior. La geoubicacin mediante puntos de acceso de WLAN es compatible con dispositivos BlackBerry que ejecutan BlackBerry Device Software 6.0 o posterior.

Modos de geoubicacin
Con BlackBerry Java SDK 6.0 y posterior, puede recuperar la informacin de geoubicacin especificando uno de los siguientes modos que se incluyen en la clase LocationInfo (paquete net.rim.device.api.gps ): Modo
GEOLOCATION_MODE

GEOLOCATION_MODE_CELL GEOLOCATION_MODE_WLAN

Descripcin Este modo recupera una ubicacin entre las fuentes de geoubicacin actualmente disponibles, basndose en factores como la conectividad de red, la exactitud de la ubicacin y la disponibilidad de los datos. Este modo recupera la ubicacin basndose en la posicin de la antena celular. Este modo recupera la ubicacin basndose en la posicin de los puntos de acceso WLAN.

Si especifica los modos GEOLOCATION_MODE o GEOLOCATION_MODE_CELL y el dispositivo BlackBerry no es compatible con la geoubicacin, la ubicacin se obtiene mediante el modo de estacin base proporcionado por el proveedor de servicios inalmbricos. La geoubicacin de la estacin base podra proporcionarse a travs de algunos proveedores de servicios inalmbricos en la red CDMA. En BlackBerry Java Development Environment 5.0, el servicio de geoubicacin proporciona informacin de ubicacin mediante la posicin de la antena celular. Para recuperar una ubicacin mediante la geoubicacin, debe especificar GPSInfo.GPS_MODE_CELLSITE como modo.

42

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin


Puede utilizar el servicio de geoubicacin para recuperar la ubicacin de un dispositivo BlackBerry llevando a cabo las acciones siguientes (similares a las acciones implicadas en la recuperacin de una ubicacin GPS): 1. 2. 3. 4. Especifique un modo de geoubicacin en un objeto BlackBerryCriteria. Recupere un proveedor de ubicacin. Solicite una posicin de geoubicacin nica o varias posiciones de geoubicacin. Recupere la informacin de ubicacin del dispositivo.

Ejemplo de cdigo: especificar un modo de geoubicacin


BlackBerryCriteria myCriteria = new BlackBerryCriteria(LocationInfo.GEOLOCATION_MODE);

Ejemplo de cdigo: recuperar un proveedor de ubicacin


BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria);

Ejemplo de cdigo: solicitar una posicin de geoubicacin nica o varias posiciones de geoubicacin
/* Single location fix */ BlackBerryLocation myLocation = myProvider.getLocation(timeout); /* Multiple location fixes */ myProvider.setLocationListener();

Ejemplo de cdigo: recuperar la informacin de ubicacin del dispositivo


double lat = myLocation.getQualifiedCoordinates().getLatitude(); double lng = myLocation.getQualifiedCoordinates().getLongitude(); double alt = myLocation.getQualifiedCoordinates().getAltitude();

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin


Los siguientes pasos muestran cmo crear una aplicacin de interfaz de usuario que proporcione la ubicacin del dispositivo BlackBerry mediante el servicio de geoubicacin. Antes de comenzar: Compruebe que el dispositivo BlackBerry o que BlackBerry Smartphone Simulator pueden acceder al servicio de geoubicacin. 1. Importe las clases y las interfaces necesarias.

43

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

import import import import import import

net.rim.device.api.gps.*; net.rim.device.api.system.Application; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; javax.microedition.location.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase GeolocationScreen que se describe en el paso 3, representa la pantalla personalizada.
public final class GeolocationDemo extends UiApplication { public static void main(String[] args) { GeolocationDemo theApp = new GeolocationDemo(); theApp.enterEventDispatcher(); } public GeolocationDemo() { pushScreen(new GeolocationScreen()); } }

3.

almacenar los valores de latitud y longitud.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen. Cree una instancia de la clase LabelField para almacenar las coordenadas que se muestran en la pantalla. Cree dos variables double para
class GeolocationScreen extends MainScreen { private LabelField _coordLabel; private double _latitude; private double _longitude; }

4.

En el constructor de pantalla, invoque super() para crear un men predeterminado. Invoque setTitle() para especificar el ttulo de la pantalla.
public GeolocationScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Geolocation Demo", Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); }

5.

En el constructor de pantalla, cree una instancia de la clase ButtonField para crear un botn en el cual el usuario del dispositivo BlackBerry har clic para recuperar la geoubicacin del dispositivo. Invoque Field.setChangeListener() para escuchar los cambios en el botn. Invoque findGeolocation(), que se describe en el paso 6, para recuperar la geoubicacin cuando el usuario haga clic en el botn. Invoque add () para agregar el botn a la pantalla. Cree una instancia de la clase LabelField para mostrar las coordenadas resultantes e invoque add() para agregar el campo a la pantalla.

44

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

ButtonField geolocButton = new ButtonField("Get geolocation", ButtonField.CONSUME_CLICK); geolocButton.setChangeListener(new FieldChangeListener() { public void fieldChanged(Field field, int context) { findGeolocation(); } }); add(geolocButton); this._coordLabel = new LabelField(); add(this._coordLabel);

6.

Cree el marco para el mtodo findGeolocation. Invoque setText() con un valor String vaco para borrar LabelField para las coordenadas. Cree una instancia de la clase Thread que invoque run(). Este subproceso se utiliza para procesar la recuperacin de la informacin de geoubicacin. En run(), cree un bloque try/ catch para especificar el modo de geoubicacin. Cree una instancia de la clase BlackBerryCriteria invocando BlackBerryCriteria() y pasando LocationInfo.GEOLOCATION_MODE como el modo de recuperar la informacin de geoubicacin. En el bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una UnsupportedOperationException.
private void findGeolocation() { this._coordLabel.setText(""); Thread geolocThread = new Thread() { public void run() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(LocationInfo.GEOLOCATION_MODE); } catch (UnsupportedOperationException e) { showException(e); } } }; geolocThread.start(); }

7.

En el primer bloque try, cree un segundo bloque try/catch para recuperar un proveedor de ubicacin. Invoque LocationProvider.getInstance() con el objeto BlackBerryCriteria para recuperar un proveedor de ubicacin. En el bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una LocationException.
try {

} catch (LocationException e)

BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria);

45

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

{ }

showException(e);

8.

En el segundo bloque try, cree un tercer bloque try/catch para recuperar la informacin de ubicacin. Invoque BlackBerryLocationProvider.getLocation() con un parmetro de -1 para recuperar un proveedor de ubicacin mediante el valor predeterminado de tiempo de espera. Invoque getLongitude() y getLatitude() para recuperar las coordenadas de longitud y latitud respectivamente. Cree una instancia de la clase StringBuffer y anexe las coordenadas resultantes al bfer. Cree una variable String e invoque toString() con el objeto StringBuffer para devolver el valor String para las coordenadas. Invoque showResults() para mostrar los resultados en la pantalla, esto se describe en el paso 9. En el primer bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una InterruptedException. En el segundo bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una LocationException.
try {

} catch (InterruptedException e) { showException(e); } catch (LocationException e) { showException(e); }

BlackBerryLocation myLocation =(BlackBerryLocation)myProvider.getLocation(-1); _longitude = myLocation.getQualifiedCoordinates().getLongitude(); _latitude = myLocation.getQualifiedCoordinates().getLatitude(); StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(_longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(_latitude); String msg = sb.toString(); showResults(msg);

9.

En el mtodo showResults, invoque invokeLater() para agregar esta seccin de cdigo a la cola de eventos de la aplicacin. Cree una instancia de la clase Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque setText() con la variable String para especificar las coordenadas resultantes para el LabelField.
private void showResults(final String msg) { Application.getApplication().invokeLater(new Runnable() { public void run() { GeolocationScreen.this._coordLabel.setText(msg); } }); }

46

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

10. En el mtodo showException, invoque invokeLater() para agregar esta seccin de cdigo a la cola de eventos de la aplicacin. Cree una instancia de Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque Dialog.alert() para crear un cuadro de dilogo de alerta y pasar el mensaje de error invocando getMessage().
private void showException(final Exception e) { Application.getApplication().invokeLater(new Runnable() { public void run() { Dialog.alert(e.getMessage()); } }); }

Ejemplo de cdigo: recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin


El siguiente ejemplo de cdigo muestra cmo crear una aplicacin de interfaz de usuario que proporcione la ubicacin del dispositivo BlackBerry mediante el servicio de geoubicacin.
import net.rim.device.api.gps.*; import net.rim.device.api.system.Application; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.component.*; import javax.microedition.location.*; public final class GeolocationDemo extends UiApplication { public static void main(String[] args) { GeolocationDemo theApp = new GeolocationDemo(); theApp.enterEventDispatcher(); } public GeolocationDemo() { pushScreen(new GeolocationScreen()); } } class GeolocationScreen extends MainScreen { private LabelField _coordLabel; private double _latitude; private double _longitude; public GeolocationScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Geolocation Demo" , Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); ButtonField geolocButton = new ButtonField("Get geolocation", ButtonField.CONSUME_CLICK); geolocButton.setChangeListener(new FieldChangeListener() 47

Gua de desarrollo

Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin

} private void findGeolocation() { this._coordLabel.setText(""); Thread geolocThread = new Thread() { public void run() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(LocationInfo.GEOLOCATION_MODE); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); try { BlackBerryLocation myLocation = (BlackBerryLocation)myProvider.getLocation(300); _longitude = myLocation.getQualifiedCoordinates().getLongitude(); _latitude = myLocation.getQualifiedCoordinates().getLatitude(); StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(_longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(_latitude); String msg = sb.toString(); showResults(msg); } catch (InterruptedException e) { showException(e); } catch (LocationException e) { showException(e); } } catch (LocationException e) { showException(e); } }

}); add(geolocButton); this._coordLabel = new LabelField(); add(this._coordLabel);

public void fieldChanged(Field field, int context) { findGeolocation(); }

48

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

} private void showResults(final String msg) { Application.getApplication().invokeLater(new Runnable() { public void run() { GeolocationScreen.this._coordLabel.setText(msg); } }); } private void showException(final Exception e) { Application.getApplication().invokeLater(new Runnable() { public void run() { Dialog.alert(e.getMessage()); } }); }

} }; geolocThread.start();

catch (UnsupportedOperationException e) { showException(e); }

Recuperar la posicin ptima con GPS y geoubicacin


Puede recuperar la posicin ptima de ubicacin solicitando actualizaciones de geoubicacin adems de actualizaciones de GPS. La posicin ptima proporciona una posicin de geoubicacin cuando un punto de posicin GPS no se puede recuperar durante el periodo de tiempo de espera especificado. Puede utilizar esta solicitud en una aplicacin que requiera la ubicacin de un dispositivo BlackBerry en todo momento y si no le importa cmo se ha recuperado la ubicacin. La clase BlackBerryCriteria, en el paquete net.rim.device.api.gps, proporciona los mtodos siguientes para recuperar el punto de posicin ptimo: Mtodo
enableGeolocationWithGPS()

Descripcin Este mtodo devuelve un punto de posicin GPS tan pronto como est disponible o dentro del periodo de tiempo de espera especificado en la solicitud de ubicacin. Si el punto de posicin GPS no est disponible, se devuelve la posicin de la geoubicacin. Puede utilizar este mtodo para varias o para una sola solicitud de posicin.

49

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

Mtodo
enableGeolocationWithGPS (BlackBerryCriteria.FASTES T_FIX_PREFERRED)

Descripcin Este mtodo devuelve la primera posicin disponible, independientemente de la fuente de ubicacin (GPS o geoubicacin). Durante el periodo de tiempo de espera que se especifica en la solicitud de ubicacin, la primera posicin disponible desde una fuente de ubicacin es la que se proporciona a la aplicacin. Puede utilizar este modo slo para solicitudes de posicin nicas.

Recuperar la posicin ptima


Los siguientes pasos muestran cmo crear una aplicacin de interfaz de usuario que ofrezca la posicin de ubicacin disponible ms rpida, sta podra provenir de una geoubicacin o de una fuente de ubicacin GPS. Las coordenadas de ubicacin y el modo que utiliza la aplicacin para recuperar la ubicacin se muestran en la pantalla. Antes de comenzar: Compruebe que el dispositivo BlackBerry o que BlackBerry Smartphone Simulator pueden acceder al servicio de geoubicacin. 1. Importe las clases y las interfaces necesarias.
import import import import import import net.rim.device.api.gps.*; net.rim.device.api.system.Application; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; javax.microedition.location.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase SingleFixScreen que se describe en el paso 3, representa la pantalla personalizada.
public final class SingleFixDemo extends UiApplication { public static void main(String[] args) { SingleFixDemo theApp = new SingleFixDemo(); theApp.enterEventDispatcher(); } public SingleFixDemo() { pushScreen(new SingleFixScreen()); } }

3.

el modo de ubicacin.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen. Cree una instancia de la clase LabelField para almacenar las coordenadas que desea mostrar en la pantalla. Cree dos variables double para almacenar los valores de latitud y longitud. Cree una variable integer y una variable String para almacenar

50

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

class SingleFixScreen extends MainScreen { private LabelField _coordLabel; private double _latitude; private double _longitude; private int _modeUsed; private String _mode; }

4.

En el constructor de pantalla, invoque super() para crear un men predeterminado. Invoque setTitle() para especificar el ttulo de la pantalla.
public SingleFixScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Single Fix Demo", Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); }

5.

En el constructor de pantalla, cree una instancia de la clase ButtonField para crear un botn en el cual el usuario del dispositivo BlackBerry har clic para recuperar la ubicacin del dispositivo. Invoque Field.setChangeListener() para escuchar los cambios en el botn. Invoque findLocation(), que se describe en el paso 6, para recuperar la geoubicacin cuando el usuario haga clic en el botn. Invoque add() para agregar el botn a la pantalla. Cree una instancia de la clase LabelField para mostrar las coordenadas resultantes e invoque add() para agregar el campo a la pantalla.
ButtonField locButton = new ButtonField("Get location fix", ButtonField.CONSUME_CLICK); locButton.setChangeListener(new FieldChangeListener() { public void fieldChanged(Field field, int context) { findLocation(); } }); add(locButton); this._coordLabel = new LabelField(); add(this._coordLabel);

6.

Cree el marco para el mtodo findLocation. Invoque setText() con un valor String vaco para borrar LabelField para las coordenadas. Cree una instancia de la clase Thread que invoque run(). Este subproceso se utiliza para procesar la recuperacin de la informacin de ubicacin. En run(), cree un bloque try/catch para especificar los criterios para recuperar una ubicacin. Cree una instancia de la clase BlackBerryCriteria invocando BlackBerryCriteria(). No se pasarn argumentos a BlackBerryCriteria(), por lo que se utilizar el modo de ubicacin predeterminado. Invoque enableGeolocationWithGPS(BlackBerryCriteria.FASTEST_FIX_PREFERRED) para recuperar el primer punto de ubicacin disponible. En el bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una UnsupportedOperationException.
private void findLocation() { this._coordLabel.setText(""); Thread locThread = new Thread() 51

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

public void run() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(); myCriteria.enableGeolocationWithGPS(BlackBerryCriteria .FASTEST_FIX_PREFERRED); } catch (UnsupportedOperationException e) { showException(e); } } }; locThread.start();

7.

En el primer bloque try, cree un segundo bloque try/catch para recuperar un proveedor de ubicacin. Invoque LocationProvider.getInstance() con el objeto BlackBerryCriteria para recuperar un proveedor de ubicacin. En el bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una LocationException.
try {

} catch (LocationException e) { showException(e); }

BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria);

8.

En el segundo bloque try, cree un tercer bloque try/catch para recuperar la informacin de ubicacin. Invoque BlackBerryLocationProvider.getLocation() con un parmetro de -1 para recuperar un proveedor de ubicacin mediante el valor predeterminado de tiempo de espera. Invoque getLongitude() y getLatitude() para recuperar las coordenadas de longitud y latitud respectivamente. Invoque getGPSMode () para recuperar el modo que se utiliza para recuperar la ubicacin. Cree un bloque switch para identificar si el modo utilizado es GPS o geoubicacin. Cree una instancia de la clase StringBuffer y anexe las coordenadas y el modo resultantes al bfer. Cree una variable String e invoque toString() con el objeto StringBuffer para devolver el valor String para las coordenadas. Invoque showResults() para mostrar los resultados en la pantalla, esto se describe en el paso 9. En el primer bloque catch, invoque showException (), que se describe en el paso 10, para mostrar el mensaje de error para una InterruptedException. En el segundo bloque catch, invoque showException(), que se describe en el paso 10, para mostrar el mensaje de error para una LocationException.
try {

BlackBerryLocation myLocation =(BlackBerryLocation)myProvider.getLocation(-1); _longitude = myLocation.getQualifiedCoordinates().getLongitude(); _latitude = myLocation.getQualifiedCoordinates().getLatitude(); _modeUsed = myLocation.getGPSMode(); switch (_modeUsed)

52

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

} catch (InterruptedException e) { showException(e); } catch (LocationException e) { showException(e); }

} StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(_longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(_latitude); sb.append("\n"); sb.append("Mode: "); sb.append(_mode); String msg = sb.toString(); showResults(msg);

case LocationInfo.GEOLOCATION_MODE: case LocationInfo.GEOLOCATION_MODE_CELL: case LocationInfo.GEOLOCATION_MODE_WLAN: _mode = "Geolocation"; break; default: _mode = "GPS";

9.

En el mtodo showResults, invoque invokeLater() para agregar esta seccin de cdigo a la cola de eventos de la aplicacin. Cree una instancia de la clase Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque setText() con la variable String para especificar las coordenadas resultantes para LabelField.
private void showResults(final String msg) { Application.getApplication().invokeLater(new Runnable() { public void run() { SingleFixScreen.this._coordLabel.setText(msg); } }); }

10. En el mtodo showException, invoque invokeLater() para agregar esta seccin de cdigo a la cola de eventos de la aplicacin. Cree una instancia de Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque Dialog.alert() para crear un cuadro de dilogo de alerta y pasar el mensaje de error invocando getMessage().
private void showException(final Exception e) { Application.getApplication().invokeLater(new Runnable() {

53

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

});

public void run() { Dialog.alert(e.getMessage()); }

Ejemplo de cdigo: recuperar la posicin ptima


El siguiente ejemplo de cdigo muestra cmo crear una aplicacin de interfaz de usuario que ofrezca la posicin de ubicacin disponible ms rpida, sta podra provenir de una geoubicacin o de una fuente de ubicacin GPS.
import net.rim.device.api.gps.*; import net.rim.device.api.system.Application; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.component.*; import javax.microedition.location.*; public final class SingleFixDemo extends UiApplication { public static void main(String[] args) { SingleFixDemo theApp = new SingleFixDemo(); theApp.enterEventDispatcher(); } public SingleFixDemo() { pushScreen(new SingleFixScreen()); } } class SingleFixScreen extends MainScreen { private LabelField _coordLabel; private double _latitude; private double _longitude; private int _modeUsed; private String _mode; public SingleFixScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Single Fix Demo" , Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); ButtonField locButton = new ButtonField("Get location fix", ButtonField.CONSUME_CLICK); locButton.setChangeListener(new FieldChangeListener() { public void fieldChanged(Field field, int context) { findLocation(); } }); add(locButton); this._coordLabel = new LabelField(); add(this._coordLabel);

54

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

} private void findLocation() { this._coordLabel.setText(""); Thread locThread = new Thread() { public void run() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(); myCriteria.enableGeolocationWithGPS(BlackBerryCriteria .FASTEST_FIX_PREFERRED); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); try { BlackBerryLocation myLocation =(BlackBerryLocation)myProvider.getLocation(-1); _longitude = myLocation.getQualifiedCoordinates().getLongitude(); _latitude = myLocation.getQualifiedCoordinates().getLatitude(); _modeUsed = myLocation.getGPSMode(); switch (_modeUsed) { case LocationInfo.GEOLOCATION_MODE: case LocationInfo.GEOLOCATION_MODE_CELL: case LocationInfo.GEOLOCATION_MODE_WLAN: _mode = "Geolocation"; break; default: _mode = "GPS"; } StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(_longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(_latitude); sb.append("\n"); sb.append("Mode: "); sb.append(_mode); String msg = sb.toString(); showResults(msg); } catch (InterruptedException e) { showException(e); } catch (LocationException e) { showException(e); }

55

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

} private void showResults(final String msg) { Application.getApplication().invokeLater(new Runnable() { public void run() { SingleFixScreen.this._coordLabel.setText(msg); } }); } private void showException(final Exception e) { Application.getApplication().invokeLater(new Runnable() { public void run() { Dialog.alert(e.getMessage()); } }); }

} }; locThread.start();

} catch (UnsupportedOperationException e) { showException(e); }

} catch (LocationException e) { showException(e); }

Recuperar varias posiciones ptimas


Los siguientes pasos muestran cmo crear una aplicacin de interfaz de usuario que proporcione actualizaciones de ubicacin continuas mediante la recuperacin de los puntos de posicin GPS cuando las ubicaciones estn disponibles o dentro del perodo de tiempo de espera especificado. Si el punto de posicin GPS no est disponible, se devuelve en su lugar la posicin de la geoubicacin. Antes de comenzar: Compruebe que el dispositivo BlackBerry o BlackBerry Smartphone Simulator tienen la tecnologa GPS activada. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.gps.*; import net.rim.device.api.system.Application; import net.rim.device.api.ui.*;

56

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import javax.microedition.location.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. Cree una variable de nmero entero y asgnele un valor de 1 que especifique el intervalo para actualizar las coordenadas de ubicacin. Cree una variable con el tipo EditField para almacenar las actualizaciones de ubicacin que se muestran en la pantalla. En main (), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, cree una instancia de la clase MultipleFixScreen, que se describe en el paso 7. Invoque setTitle() para especificar el ttulo de la pantalla. Cree una instancia de la clase EditField y agregue el campo a la pantalla. Invoque startLocationUpdate(), que se describe en el paso 4, para comenzar a recuperar actualizaciones de ubicacin. Invoque pushScreen() para mostrar la pantalla personalizada de la aplicacin.
public class MultipleFixDemo extends UiApplication { private static int _interval = 1; private EditField _status; public static void main(String[] args) { new MultipleFixDemo().enterEventDispatcher(); } public MultipleFixDemo() { MultipleFixScreen screen = new MultipleFixScreen(); screen.setTitle("Multiple Fix Demo"); _status = new EditField(Field.NON_FOCUSABLE); screen.add(_status); startLocationUpdate(); pushScreen(screen); } }

3.

Cree un mtodo updateLocationScreen que invoque invokeLater() para agregar esta seccin del cdigo a la cola de eventos de la aplicacin. Cree una instancia de la clase Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque setText() para mostrar los resultados en la pantalla.
private void updateLocationScreen(final String msg) { invokeLater(new Runnable() { public void run() { _status.setText(msg); } }); }

4.

Cree el marco para el mtodo startLocationUpdate. Cree un bloque try/catch para especificar los criterios para recuperar una ubicacin. Cree una instancia de la clase BlackBerryCriteria invocando BlackBerryCriteria(). El modo de ubicacin predeterminado se utiliza porque no se pasan argumentos a BlackBerryCriteria(). Invoque enableGeolocationWithGPS() para especificar la necesidad de
57

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

recuperar un punto de posicin GPS si est disponible, o de recuperar una posicin de geoubicacin si el punto de posicin GPS no est disponible. Si en el bloque catch observa una UnsupportedOperationException querr decir que el modo de ubicacin no es compatible.
private void startLocationUpdate() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(); myCriteria.enableGeolocationWithGPS(); catch (UnsupportedOperationException ue) { System.err.println("Require mode is unavailable"); System.err.println(ue); System.exit(0); } return; }

5.

En el primer bloque try, cree un segundo bloque try/catch para recuperar un proveedor de ubicacin. Invoque LocationProvider.getInstance() con el objeto BlackBerryCriteria para recuperar un proveedor de ubicacin. Cree una instancia de Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable y muestre un mensaje que indique que no ha sido posible recuperar el proveedor de ubicacin. Invoque setLocationListener() pasando el valor de intervalo, el valor de tiempo de espera y la antigedad mxima como parmetros para registrar un servicio de escucha cuando est disponible un proveedor de ubicacin. Si en el bloque catch observa una LocationException querr decir que el proveedor de ubicacin no est disponible.
try {

} catch (LocationException le) { System.err.println("Failed to retrieve a location provider");

BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); if ( myProvider == null ) { Runnable showUnsupportedDialog = new Runnable() { public void run() { Dialog.alert("Location service unsupported, exiting..."); System.exit( 1 ); } }; invokeLater( showUnsupportedDialog ); } else { myProvider.setLocationListener(new LocationListenerImpl(), _interval, 1, 1); }

58

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

System.err.println(le); System.exit(0);

6.

Cree una segunda clase que implemente LocationListener. Implemente locationUpdated() para proporcionar actualizaciones de ubicacin. Cree una instruccin if para comprobar que la ubicacin es vlida. Si la ubicacin es vlida, recupere las coordenadas de longitud, latitud y altitud invocando getLongitude(), getLatitude() y getAltitude() respectivamente. Cree una instancia de la clase StringBuffer y anexe las coordenadas resultantes al bfer. Invoque updateLocationScreen() para mostrar las coordenadas resultantes en la pantalla.
private class LocationListenerImpl implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if(location.isValid()) { double longitude = location.getQualifiedCoordinates().getLongitude(); double latitude = location.getQualifiedCoordinates().getLatitude(); float altitude = location.getQualifiedCoordinates().getAltitude(); StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(latitude); sb.append("\n"); sb.append("Altitude: "); sb.append(altitude); sb.append(" m"); MultipleFixDemo.this.updateLocationScreen(sb.toString()); } } public void providerStateChanged(LocationProvider provider, int newState) { // Not implemented } }

7.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen. En el constructor de pantalla, invoque super() para crear un men predeterminado. Cree una instancia de RichTextField para mostrar un mensaje de instrucciones. Invoque add() para agregar RichTextField a la pantalla.
private final static class MultipleFixScreen extends MainScreen { MultipleFixScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); RichTextField instructions = new RichTextField("Waiting for location update...",Field.NON_FOCUSABLE); this.add(instructions); } }

59

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

Ejemplo de cdigo: recuperar varias posiciones ptimas


El siguiente ejemplo de cdigo muestra cmo crear una aplicacin de interfaz de usuario que proporcione actualizaciones de ubicacin continuas mediante la recuperacin de los puntos de posicin GPS cuando las posiciones estn disponibles o dentro del perodo de tiempo de espera especificado. Si el punto de posicin GPS no est disponible, se devuelve en su lugar la posicin de la geoubicacin.
import net.rim.device.api.gps.*; import net.rim.device.api.system.Application; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import javax.microedition.location.*; public class MultipleFixDemo extends UiApplication { private static int _interval = 1; private EditField _status; public static void main(String[] args) { new MultipleFixDemo().enterEventDispatcher(); } public MultipleFixDemo() { MultipleFixScreen screen = new MultipleFixScreen(); screen.setTitle("Multiple Fix Demo"); _status = new EditField(Field.NON_FOCUSABLE); screen.add(_status); startLocationUpdate(); pushScreen(screen); } private void updateLocationScreen(final String msg) { invokeLater(new Runnable() { public void run() { _status.setText(msg); } }); } private void startLocationUpdate() { try { BlackBerryCriteria myCriteria = new BlackBerryCriteria(); myCriteria.enableGeolocationWithGPS(); try { BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); if ( myProvider == null ) { Runnable showUnsupportedDialog = new Runnable() { 60

Gua de desarrollo

Recuperar la posicin ptima con GPS y geoubicacin

exiting...");

public void run() { Dialog.alert("Location service unsupported, } System.exit( 1 );

} private class LocationListenerImpl implements LocationListener { public void locationUpdated(LocationProvider provider, Location location) { if(location.isValid()) { double longitude = location.getQualifiedCoordinates().getLongitude(); double latitude = location.getQualifiedCoordinates().getLatitude(); float altitude = location.getQualifiedCoordinates().getAltitude(); StringBuffer sb = new StringBuffer(); sb.append("Longitude: "); sb.append(longitude); sb.append("\n"); sb.append("Latitude: "); sb.append(latitude); sb.append("\n"); sb.append("Altitude: "); sb.append(altitude); sb.append(" m"); MultipleFixDemo.this.updateLocationScreen(sb.toString()); } } public void providerStateChanged(LocationProvider provider, int newState) { // Not implemented }

} else { myProvider.setLocationListener(new LocationListenerImpl(), _interval, 1, 1); } } catch (LocationException le) { System.err.println("Failed to retrieve a location provider"); System.err.println(le); System.exit(0); } } catch (UnsupportedOperationException ue) { System.err.println("Require mode is unavailable"); System.err.println(ue); System.exit(0); } return;

}; invokeLater( showUnsupportedDialog );

61

Gua de desarrollo

Solicitar actualizaciones simultneas de geoubicacin y GPS

} private final static class MultipleFixScreen extends MainScreen { MultipleFixScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); RichTextField instructions = new RichTextField("Waiting for location update...",Field.NON_FOCUSABLE); this.add(instructions); } }

Solicitar actualizaciones simultneas de geoubicacin y GPS


Puede solicitar actualizaciones simultneas de geoubicacin y GPS. La solicitud de actualizaciones simultneas ofrece flexibilidad a la aplicacin con el fin de especificar parmetros de solicitud (por ejemplo, la frecuencia y el tiempo de espera) y para seleccionar la informacin de ubicacin ms conveniente a utilizar segn los criterios personalizados. Por ejemplo, puede que desee proporcionar a los usuarios de dispositivos BlackBerry una ubicacin aproximada y rpida (mediante la geoubicacin) antes de que haya disponible un punto de posicin GPS ms adecuado. Para solicitar las actualizaciones de geoubicacin y de GPS, debe crear dos subprocesos separados con el fin de solicitar las instancias independientes de BlackBerryLocationProvider. Un subproceso especifica un modo de ubicacin GPS y el otro subproceso especifica un modo de geoubicacin. Ejemplo de cdigo: solicitar actualizaciones simultneas de geoubicacin y GPS
//In a GPS thread try { BlackBerryLocationProvider provider = (BlackBerryLocationProvider)LocationProvider.getInstance(new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST)); } catch (LocationException e) { showException(e); } //In a geolocation thread try { BlackBerryLocationProvider provider = (BlackBerryLocationProvider)LocationProvider.getInstance(new BlackBerryCriteria(LocationInfo.GEOLOCATION_MODE_CELL)); } catch (LocationException e) { showException(e); }

62

Gua de desarrollo

Codificacin geogrfica y codificacin geogrfica inversa

Codificacin geogrfica y codificacin geogrfica inversa

La API net.rim.device.api.lbs.Locator proporciona los mtodos de codificacin geogrfica que le pueden permitir solicitar las coordenadas geoespaciales para una direccin. Tambin proporciona mtodos de codificacin geogrfica inversa que pueden permitirle solicitar la direccin de una calle correspondiente a una coordenada geoespacial. Puede utilizar los mtodos geocode() para solicitar las coordenadas geoespaciales. Una solicitud correcta devuelve una matriz de objetos Landmark. Puede utilizar los mtodos reverseGeocode() para solicitar la direccin aproximada de una calle, ciudad, provincia/ estado o pas. Una solicitud correcta devuelve una matriz de objetos Landmark. Un objeto Landmark puede contener un nombre de etiqueta descriptiva, una descripcin, las coordenadas geoespaciales y la direccin de una calle. Las solicitudes de informacin de codificacin geogrfica y codificacin geogrfica inversa son sncronas y pueden interrumpirse. Una aplicacin del dispositivo BlackBerry puede utilizar la clase Locator para realizar slo una solicitud a la vez. Su aplicacin debe invocar los mtodos geocode() y reverseGeocode() fuera del subproceso de distribucin de eventos. Las solicitudes de estos mtodos realizadas en el subproceso de distribucin de eventos son denegadas y tienen como resultado un valor IllegalThreadStateException. Cada solicitud se enva a BlackBerry Infrastructure. Si una solicitud es errnea, se lanza un valor LocatorException con un cdigo de error que indica por qu ha generado error la solicitud. Si una solicitud es errnea o se estanca en el nivel de transporte, se cancela conforme a lo especificado para REQUEST_TIMEOUT. Si no se ha instalado el mdulo de la API LBS Maps (net_rim_bb_lbs_api) en un dispositivo BlackBerry, al invocar los mtodos geocode() y reverseGeocode() se lanza un valor MapServiceException. El dispositivo BlackBerry no guarda las solicitudes en cach.

Recuperar las coordenadas geoespaciales de una direccin utilizando la codificacin geogrfica


Puede recuperar las coordenadas geoespaciales invocando Locator.geocode(). Cuando invoque Locator.geocode(), debe especificar la direccin de una calle utilizando un objeto AddressInfo o un objeto String de informacin de la direccin. Su aplicacin debe solicitar informacin de codificacin geogrfica fuera del subproceso de distribucin de eventos. Una solicitud correcta de informacin de codificacin geogrfica devolver una matriz de objetos Landmark. 1. Importe las clases necesarias.
import net.rim.device.api.lbs.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor.

63

Gua de desarrollo

Recuperar las coordenadas geoespaciales de una direccin utilizando la codificacin geogrfica

public class myGeocode { public myGeocode() { } }

3. 4.

En la clase, cree una variable privada de tipo Thread.


private Thread geocoder;

En el constructor, cree una instancia de la clase Thread. No puede recuperar informacin de codificacin geogrfica en el subproceso principal de la aplicacin.
geocoder = new Thread(thread); geocoder.setPriority(Thread.MIN_PRIORITY); geocoder.start();

5.

En la clase, cree un valor Thread que invoque un mtodo run() pblico. En run(), cree una instancia de la clase AddressInfo. Rellene el objeto con informacin de la direccin. Cree una instancia de la clase Coordinates pasando los valores de latitud, longitud y altitud al constructor para iniciar la bsqueda del cdigo geogrfico. En el ejemplo de cdigo siguiente, el servidor de localizacin LBS utiliza la latitud Norte positiva y la longitud Oeste negativa de la regin de Waterloo (Ontario) para realizar la bsqueda de cdigo geogrfico. Cree un bloque try/catch. En este bloque, invoque geocode() para encontrar la direccin y devolver los resultados en una matriz Landmark.
Runnable thread = new Runnable() { public void run() { AddressInfo addrInfo = new AddressInfo(); addrInfo.setField(AddressInfo.STREET, "455 Phillip Street"); addrInfo.setField(AddressInfo.CITY, "Waterloo"); addrInfo.setField(AddressInfo.STATE, "Ontario"); addrInfo.setField(AddressInfo.POSTAL_CODE, "N2L 3X2"); addrInfo.setField(AddressInfo.COUNTRY, "Canada"); Coordinates coord = new Coordinates(43.28, -80.31, Float.NaN); try { Landmark[] results = Locator.geocode(addrInfo, coord); } catch ( LocatorException lex ) { } } };

Ejemplo de cdigo: Recuperar las coordenadas geoespaciales de una direccin utilizando la codificacin geogrfica
import net.rim.device.api.lbs.*; import javax.microedition.location.*; public class myGeocode { private Thread geocoder; 64

Gua de desarrollo

Recuperar una direccin utilizando la codificacin geogrfica inversa

public myGeocode() { geocoder = new Thread(thread); geocoder.setPriority(Thread.MIN_PRIORITY); geocoder.start(); } Runnable thread = new Runnable() { public void run() { AddressInfo addrInfo = new AddressInfo(); addrInfo.setField(AddressInfo.STREET, "455 Phillip Street"); addrInfo.setField(AddressInfo.CITY, "Waterloo"); addrInfo.setField(AddressInfo.STATE, "Ontario"); addrInfo.setField(AddressInfo.POSTAL_CODE, "N2L 3X2"); addrInfo.setField(AddressInfo.COUNTRY, "Canada"); Coordinates coord = new Coordinates(43.28, -80.31, Float.NaN); try { Landmark[] results = Locator.geocode(addrInfo, coord); } catch ( LocatorException lex ) { } } };

Recuperar una direccin utilizando la codificacin geogrfica inversa


Puede utilizar coordenadas geoespaciales para recuperar una direccin invocando Locator.reverseGeocode (). Debe especificar las coordenadas de latitud y longitud mediante dos campos int o bien mediante un objeto Coordinates. Los valores de las coordenadas se pasan en forma de grados decimales, hasta cinco cifras decimales, con los valores multiplicados por 100.000. Su aplicacin debe solicitar informacin de codificacin geogrfica inversa, por ejemplo, una direccin, fuera del subproceso de distribucin de eventos. Una solicitud correcta de informacin de codificacin geogrfica inversa devolver una matriz de objetos Landmark. 1. Importe las clases necesarias.
import net.rim.device.api.lbs.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor.


public class myReverseGeocode { public myReverseGeocode() { } }

3.

En la clase, cree una variable privada de tipo Thread.


65

Gua de desarrollo

Ejemplo de cdigo: recuperar una direccin utilizando coordenadas geoespaciales y codificacin geogrfica inversa

private Thread reverseGeocode;

4.

En el constructor, cree una instancia de la clase Thread. No puede recuperar informacin de codificacin geogrfica inversa en el subproceso principal de la aplicacin.
reverseGeocode = new Thread(thread); reverseGeocode.setPriority(Thread.MIN_PRIORITY); reverseGeocode.start();

5.

En la clase, cree una instancia de Thread que invoque un mtodo pblico run(). En run(), cree una instancia de la clase AddressInfo. Cree dos campos int y rellene los campos con los valores de latitud y longitud con una precisin de hasta cinco decimales, multiplicada por 100.000. Cree un bloque try/catch. En este bloque, invoque reverseGeocode() para encontrar la direccin y devolver los resultados en una matriz Landmark.
Runnable thread = new Runnable() { public void run() { AddressInfo addrInfo = null; int latitude = (int)(45.423488 * 100000); int longitude = (int)(-80.32480 * 100000); try { Landmark[] results = Locator.reverseGeocode (latitude, longitude, Locator.ADDRESS ); if ( results != null && results.length > 0 ) addrInfo = results[0].getAddressInfo(); } catch ( LocatorException lex ) { } } };

6.

Especifique el tipo de bsqueda pasando uno de los siguientes parmetros a Locator.reverseGeocode(): Locator.ADDRESS: devuelve la direccin ms cercana o la calle ms cercana a la latitud/longitud especificada. Locator.CITY: devuelve un valor centrado en el mbito de la ciudad Locator.COUNTRY: devuelve un valor centrado en el mbito del pas Locator.PROVINCE_STATE: devuelve un valor centrado en el mbito de la provincia o el estado Locator.POSTAL_CODE: devuelve un valor centrado en el nivel de cdigo postal

Ejemplo de cdigo: recuperar una direccin utilizando coordenadas geoespaciales y codificacin geogrfica inversa
import net.rim.device.api.lbs.*; import javax.microedition.location.*; public class myReverseGeocode { 66

Gua de desarrollo

Ejemplo de cdigo: recuperar una direccin utilizando coordenadas geoespaciales y codificacin geogrfica inversa

private Thread reverseGeocode; public myReverseGeocode() { reverseGeocode = new Thread(thread); reverseGeocode.setPriority(Thread.MIN_PRIORITY); reverseGeocode.start(); } Runnable thread = new Runnable() { public void run() { AddressInfo addrInfo = null; int latitude = (int)(45.423488 * 100000); int longitude = (int)(-80.32480 * 100000); try { Landmark[] results = Locator.reverseGeocode (latitude, longitude, Locator.ADDRESS ); if ( results != null && results.length > 0 ) addrInfo = results[0].getAddressInfo(); } catch ( LocatorException lex ) { } } };

67

Gua de desarrollo

BlackBerry Maps

BlackBerry Maps
Su aplicacin puede interactuar con BlackBerry Maps de las siguientes formas: Abra BlackBerry Maps desde la aplicacin del dispositivo BlackBerry. Muestre las superposiciones KML en BlackBerry Maps. Abra BlackBerry Maps desde BlackBerry Browser. Incorpore un mapa a la aplicacin de su dispositivo BlackBerry.

Puede crear una aplicacin de dispositivo BlackBerry que interacte con BlackBerry Maps. BlackBerry Maps es una aplicacin de mapas y ubicaciones que puede mostrar un mapa, la ubicacin del dispositivo BlackBerry, una ruta desde una ubicacin de partida a una ubicacin de destino especfica, as como puntos de inters en un mapa.

BlackBerry Maps puede instalarse en dispositivos BlackBerry que ejecuten BlackBerry Device Software versin 4.2 o posterior. Puede utilizar la clase MapsArguments en el paquete net.rim.blackberry.api.invoke para crear una aplicacin de dispositivo BlackBerry que interacte con BlackBerry Maps.

Abrir BlackBerry Maps desde la aplicacin


Puede abrir BlackBerry Maps utilizando el mtodo Invoke.invokeApplication(). Si utiliza este mtodo, debe pasar un parmetro net.rim.blackberry.api.invoke.MapsArguments para personalizar la vista de mapa que aparece. Puede utilizar los mtodos siguientes para especificar cmo quiere abrir BlackBerry Maps: Utilice la configuracin predeterminada invocando MapsArgument(). Utilice la informacin de direccin de un contacto invocando MapsArguments(Contact, int). Muestre la ubicacin de un hito invocando MapsArguments(Landmark[]). Muestre una ubicacin en unas coordenadas especficas invocando MapsArguments(MapView). Utilice un documento de ubicacin invocando MapsArguments(String, String). Utilice informacin de bsqueda local invocando MapsArguments(ARG_LOCAL_SEARCH, String, String).

Abrir BlackBerry Maps utilizando la configuracin predeterminada


Puede abrir BlackBerry Maps para mostrar la vista predeterminada de mapa invocando Invoke.invokeApplication() y pasando un nuevo objeto MapsArguments. 1. 2. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*;

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.

68

Gua de desarrollo

Abrir BlackBerry Maps utilizando informacin de un contacto

public class invokeMaps { public invokeMaps() { } }

3.

En el constructor, invoque Invoke.invokeApplication() para abrir BlackBerry Maps. Pase un objeto MapsArguments nuevo.
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments());

Ejemplo de cdigo: Abrir BlackBerry Maps utilizando la configuracin predeterminada


import net.rim.blackberry.api.invoke.*; public class invokeMaps { public invokeMaps() { Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments()); } }

Abrir BlackBerry Maps utilizando informacin de un contacto


Puede abrir BlackBerry Maps para mostrar una ubicacin en un mapa utilizando la informacin de la direccin de un contacto de la aplicacin Contactos del dispositivo BlackBerry. 1. Importe las clases y las interfaces necesarias.
import net.rim.blackberry.api.invoke.*; import javax.microedition.pim.*;

2.

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.
public class invokeMaps { public invokeMaps () { } }

3.

En el constructor, recupere una instancia de un objeto ContactList del dispositivo BlackBerry. Cree un contacto utilizando la clase Contact. Rellene Contact con el nombre y la direccin del contacto.
ContactList contacts = null; try { contacts = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY); } catch (PIMException e) 69

Gua de desarrollo

Abrir BlackBerry Maps utilizando informacin de un contacto

return; } Contact contact = contacts.createContact(); contact.addString(Contact.FORMATTED_NAME, PIMItem.ATTR_NONE, "Ms. Andrea Aime"); contact.addString(Contact.FORMATTED_ADDR, PIMItem.ATTR_NONE, "455 Phillip St. Waterloo ON N2L3X2 Canada"); String[] name = new String[ contacts.stringArraySize( Contact.NAME ) ]; name[ Contact.NAME_GIVEN ] = "Andrea"; name[ Contact.NAME_FAMILY ] = "Aime"; name[ Contact.NAME_PREFIX ] = "Ms."; String[] addr = new String[ contacts.stringArraySize( Contact.ADDR ) ]; addr[ Contact.ADDR_STREET ] = "455 Phillip St"; addr[ Contact.ADDR_LOCALITY ] = "Waterloo"; addr[ Contact.ADDR_REGION ] = "ON"; addr[ Contact.ADDR_POSTALCODE ] = "N2L3X2"; addr[ Contact.ADDR_COUNTRY ] = "Canada";

4.

En el constructor, cree un objeto MapsArguments pasando el objeto Contact con una compensacin de cero. Invoque Invoke.invokeApplication() para abrir BlackBerry Maps. Pase el objeto MapsArguments.
MapsArguments mapsArgs = new MapsArguments(contact, 0); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, mapsArgs);

Ejemplo de cdigo: Invocar BlackBerry Maps utilizando informacin de un contacto


import net.rim.blackberry.api.invoke.*; import javax.microedition.pim.*; public class invokeMaps { public invokeMaps() { ContactList contacts = null; try { contacts = (ContactList) PIM.getInstance().openPIMList (PIM.CONTACT_LIST, PIM.READ_ONLY); } catch (PIMException e) { return; } Contact contact = contacts.createContact(); contact.addString(Contact.FORMATTED_NAME, PIMItem.ATTR_NONE, "Ms. Andrea Aime"); contact.addString(Contact.FORMATTED_ADDR, PIMItem.ATTR_NONE, "455 Phillip St. Waterloo ON N2L3X2 Canada"); String[] name = new String[ contacts.stringArraySize( Contact.NAME ) ]; name[ Contact.NAME_GIVEN ] = "Andrea"; name[ Contact.NAME_FAMILY ] = "Aime"; name[ Contact.NAME_PREFIX ] = "Ms."; String[] addr = new String[ contacts.stringArraySize( Contact.ADDR ) ]; addr[ Contact.ADDR_STREET ] = "455 Phillip St"; addr[ Contact.ADDR_LOCALITY ] = "Waterloo";

70

Gua de desarrollo

Abrir BlackBerry Maps utilizando coordenadas especficas

addr[ Contact.ADDR_REGION ] = "ON"; addr[ Contact.ADDR_POSTALCODE ] = "N2L3X2"; addr[ Contact.ADDR_COUNTRY ] = "Canada"; MapsArguments mapsArgs = new MapsArguments(contact, 0); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, mapsArgs);

Abrir BlackBerry Maps utilizando coordenadas especficas


Puede abrir BlackBerry Maps para mostrar una ubicacin en un mapa ofreciendo las coordenadas de latitud y longitud de una ubicacin y especificando los valores de zoom y rotacin. Los valores de zoom van de 0 a MapView.MAX_ZOOM. Los valores de rotacin se expresan en grados para girar el mapa desde el norte hacia arriba y van de 0 a 359. 1. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*; import net.rim.blackberry.api.maps.*;

2.

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.
public class invokeMaps { public invokeMaps () { } }

3.

En el constructor, cree una instancia de la clase MapView. Invoque MapView.setLatitude(), MapView.setLongitude() y MapView.setZoom() para especificar las coordenadas y el zoom que desea utilizar.
MapView mapView = new MapView(); mapView.setLatitude(4328915); mapView.setLongitude(-8032480); mapView.setZoom(10);

4.

En el constructor, cree una instancia de la clase MapsArguments que utilice el objeto MapView como un argumento. Invoque Invoke.invokeApplication() para abrir BlackBerry Maps y pasar el objeto MapsArguments.
MapsArguments mapsArgs = new MapsArguments(mapView); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, mapsArgs);

Ejemplo de cdigo: Invocar BlackBerry Maps utilizando coordenadas especficas


import net.rim.blackberry.api.invoke.*; import net.rim.blackberry.api.maps.*; public class invokeMaps { public invokeMaps() { 71

Gua de desarrollo

Abrir BlackBerry Maps utilizando un hito

MapView mapView = new MapView(); mapView.setLatitude(4328915); mapView.setLongitude(-8032480); mapView.setZoom(10); MapsArguments mapsArgs = new MapsArguments(mapView); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, mapsArgs);

Abrir BlackBerry Maps utilizando un hito


Puede abrir BlackBerry Maps para mostrar la ubicacin de un hito en un mapa especificando una matriz de objetos Landmark. Un objeto landmark puede contener un nombre de etiqueta descriptiva, una descripcin, las coordenadas geoespaciales y la direccin de una calle. Si no especifica las coordenadas, BlackBerry Maps puede utilizar la direccin para encontrarlas. En el caso de que ni las coordenadas ni la direccin sean vlidas, BlackBerry Maps no muestra la ubicacin del hito. 1. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*; import javax.microedition.location.*;

2.

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.
public class invokeMaps { public invokeMaps () { } }

3. 4.

En el constructor, cree una matriz de objetos Landmark que pueda utilizar para agregar la informacin del hito.
Landmark[] landMarks = new Landmark[3];

En el constructor, cree una matriz AddressInfo e invoque AddressInfo.setField() para especificar la direccin de la calle. Aada la matriz AddressInfo a la matriz Landmark.
AddressInfo addressInfo = new AddressInfo(); addressInfo.setField(AddressInfo.STREET, "455 Phillip St"); addressInfo.setField(AddressInfo.CITY, "Waterloo"); addressInfo.setField(AddressInfo.STATE, "Ontario"); landMarks[0] = new Landmark("AAA", "Description 1", null, addressInfo);

5.

En el constructor, cree una instancia de la clase QualifiedCoordinates y especifique las coordenadas. Aada QualifiedCoordinates a la matriz Landmark.
QualifiedCoordinates coordinates = new QualifiedCoordinates(45.4, -75.1, 0, 0, 0); landMarks[1] = new Landmark("BBB", "Description 2", coordinates, null); coordinates = new QualifiedCoordinates(45.3,-75.3,0,0,0); landMarks[2] = new Landmark("CCC", "Description 3", coordinates, null);

72

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

6.

En el constructor, cree una instancia de la clase MapsArguments utilizando la matriz Landmarks como argumento. Invoque Invoke.invokeApplication() para abrir BlackBerry Maps. Pase el objeto MapsArguments.
MapsArguments ma = new MapsArguments(landMarks); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma);

Ejemplo de cdigo: Abrir BlackBerry Maps utilizando un hito


import net.rim.blackberry.api.invoke.*; import javax.microedition.location.*; public class invokeMaps { public invokeMaps () { Landmark[] landMarks = new Landmark[3]; AddressInfo addressInfo = new AddressInfo(); addressInfo.setField(AddressInfo.STREET, "455 Phillip St"); addressInfo.setField(AddressInfo.CITY, "Waterloo"); addressInfo.setField(AddressInfo.STATE, "Ontario"); landMarks[0] = new Landmark("AAA", "Description 1", null, addressInfo); QualifiedCoordinates coordinates = new QualifiedCoordinates(45.4, -75.1, 0, 0, 0); landMarks[1] = new Landmark("BBB", "Description 2", coordinates, null); coordinates = new QualifiedCoordinates(45.3,-75.3,0,0,0); landMarks[2] = new Landmark("CCC", "Description 3", coordinates, null); MapsArguments ma = new MapsArguments(landMarks); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma); } }

Abrir BlackBerry Maps utilizando un documento de ubicacin


Puede abrir BlackBerry Maps para mostrar rutas y lugares del mapa pasando un documento de ubicacin. Un documento de ubicacin es un objeto String que contiene elementos XML con atributos que pueden especificar informacin de la ubicacin y la ruta. Los elementos XML que puede utilizar incluyen <lbs>, <getRoute> y <location>.

Elemento XML: <lbs>


Los elementos <lbs> de apertura y cierre encapsulan los elementos del documento de ubicacin.

Padres vlidos
Ninguno

Hijos vlidos

73

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

<location>, <getRoute>

Atributos
Atributo
id

Tipo
String

clear

String

Descripcin Compatible con Este valor especifica la identificacin de BlackBerry Java un documento de ubicacin. Development Environment versin 4.5.0 o posterior Este valor especifica la accin de BlackBerry JDE versin 4.5.0 borrado que se va a realizar en la o posterior informacin de un mapa. El valor es una lista de identificaciones del documento de ubicacin delimitadas por comas o por uno de los valores siguientes:
NONE: no borra ninguna

informacin DOCS: borra informacin de ubicacin y rutas de todos los documentos de ubicacin que tengan un atributo especfico id LOCATIONS: borra toda la informacin de la ubicacin del mapa ROUTES: borra toda la informacin de rutas del mapa ALL: borra toda la informacin de ubicacin y rutas del mapa

Ejemplo de cdigo
<lbs <lbs <lbs <lbs <lbs <lbs <lbs <lbs <lbs <lbs clear='WatLocation'></lbs> clear='WatLocation,OttLocation'></lbs> clear='WatRoute'></lbs> clear='WatRoute,OttRoute'></lbs> clear='NONE'></lbs> clear='DOCS'></lbs> clear='LOCATIONS'></lbs> clear='ROUTES'></lbs> clear='ALL'></lbs> clear='ALL' id='Wat'> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo' zoom='10' /> </lbs>

74

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

Elemento XML: <location>


El elemento <location> contiene informacin de una ubicacin especfica. description, label, x y y son atributos necesarios.

Padres vlidos
<lbs>, <getRoute>

Hijos vlidos
Ninguno

Atributos
Atributo
address

Tipo
String

Descripcin Este atributo especifica la direccin de la calle. Este atributo especifica la categora. Este atributo especifica la ciudad. Este atributo especifica el pas. Este atributo especifica la informacin de la descripcin de la ubicacin. ste es un atributo necesario. Este atributo especifica la direccin de correo electrnico. Este atributo especifica el nmero de fax. Este atributo especifica la etiqueta que aparece al lado de una ubicacin en un mapa. ste es un atributo necesario. Este atributo especifica el nmero de telfono. Este atributo especifica el cdigo postal. Este atributo especifica la informacin de clasificacin dentro de un intervalo de 0 a 5.

categories city country description

String String String String

Compatible con BlackBerry Java Development Environment versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.0 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.0 o posterior

email fax label

String String String

phone postalCode rating

String String double

BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior BlackBerry JDE versin 4.2.1 o posterior

75

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

Atributo
region url x o el alias, lon

Tipo
String String integer

Descripcin Compatible con Este atributo especifica la provincia o el BlackBerry JDE versin 4.2.1 o estado. posterior Este atributo especifica la direccin URL. BlackBerry JDE versin 4.2.1 o posterior Este atributo especifica la longitud en BlackBerry JDE versin 4.2.0 o grados decimales, con una precisin de posterior hasta cinco decimales, multiplicada por 100.000. ste es un atributo necesario. Este atributo especifica la latitud en grados decimales, con una precisin de hasta cinco decimales, multiplicada por 100.000. BlackBerry JDE versin 4.2.0 o posterior

y o el alias, lat

integer

zoom

integer

ste es un atributo necesario. Este atributo especifica el nivel de zoom BlackBerry JDE versin 4.2.0 o de 0 a 15. posterior

Ejemplo de cdigo
<lbs id='Waterloo'> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo' zoom='10' /> </lbs>

Elemento XML: <getRoute>


El elemento <getRoute> contiene la informacin de la ruta. Para mostrar la informacin de la ruta en un mapa, debe colocar el lugar de inicio y fin de la ruta en dos elementos <location> en el bloque <getRoute>. Puede utilizar los atributos x y y , o los alias lon y lat en un elemento <location> que debe anidar en el bloque <getRoute>.

Padres vlidos
<lbs>

Hijos vlidos
<location>

Atributos
Ninguno Ejemplo de cdigo

76

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

<lbs> <getRoute> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo, Ontario, Canada' /> <location lon='-7569792' lat='4542349' label='Ottawa, ON' description='Ottawa, Ontario, Canada' /> </getRoute> </lbs>

Mostrar y borrar ubicaciones de un mapa utilizando un documento de ubicacin


En BlackBerry Maps, puede utilizar un documento de ubicacin para mostrar una ubicacin en un mapa. Tambin puede borrar ubicaciones de un mapa una vez se hayan mostrado. 1. 2. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*;

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.
public class invokeMaps { public invokeMaps () { } }

3.

En el constructor, cree una variable String para utilizarla para el documento de ubicacin. Aada un elemento <lbs>. Configure un elemento <location> con la ubicacin que desee mostrar.
String document = "<lbs id='Waterloo'> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo' zoom='10' /> </lbs>";

4.

En el constructor, invoque Invoke.invokeApplication() utilizando la constante APP_TYPE_MAPS y un nuevo objeto MapsArguments como parmetros para abrir BlackBerry Maps. Pase la propiedad ARG_LOCATION_DOCUMENT y la variable String que representa el documento de ubicacin como parmetros para que la clase MapsArguments muestre la ubicacin indicada en el documento de ubicacin.
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments (MapsArguments.ARG_LOCATION_DOCUMENT, document));

5.

Realice una de las tareas siguientes para borrar informacin de ubicacin de un mapa una vez se haya mostrado: Tarea Borrar una ubicacin de un mapa. Pasos Cree un valor String que configure el atributo clear en el id del documento de ubicacin que contiene la informacin de la ubicacin.

77

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

String document = "<lbs clear='Waterloo'></lbs>";

Borrar todas las ubicaciones de un mapa.

Cree un String que configure el atributo clear para que sea LOCATIONS.
String document = "<lbs clear='LOCATIONS'></lbs>";

Borrar todas las ubicaciones y rutas de un mapa.

Cree un String que configure el atributo clear para que sea ALL.
String document = "<lbs clear='ALL'></ lbs>";

El contenido del mapa se borra antes de que se muestre en el mapa cualquier contenido nuevo. Puede combinar las acciones de mostrar y borrar contenido del mapa en un documento de ubicacin.
String document = "<lbs clear='Waterloo' id='NewZone'> <location x='-8050000' y='4340000' label='NewZone' description='NewZone' zoom='10' /> </lbs>";

Ejemplo de cdigo: Visualizar ubicaciones en un mapa utilizando un documento de ubicacin


import net.rim.blackberry.api.invoke.*; public class invokeMaps { public invokeMaps () { String document = "<lbs id='Waterloo'> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo' zoom='10' /> </lbs>"; Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments (MapsArguments.ARG_LOCATION_DOCUMENT, document)); } }

Mostrar y borrar una ruta en un mapa utilizando un documento de ubicacin


En BlackBerry Maps, puede utilizar un documento de ubicacin para mostrar una ruta Tambin puede borrar una ruta de un mapa despus de que se haya mostrado. 1. 2. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*;

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.

78

Gua de desarrollo

Abrir BlackBerry Maps utilizando un documento de ubicacin

public class invokeMaps { public invokeMaps () { } }

3.

En el constructor, cree una variable String para utilizarla para el documento de ubicacin. Aada un <lbs> y un elemento <getRoute>. Agregue elementos <location> para especificar la ubicacin donde comienza y termina la ruta que quiere mostrar.
String document = "<lbs id='WatRoute'><getRoute> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo, Ontario, Canada' /> <location x='-7569792' y='4542349' label='Ottawa, ON' description='Ottawa, Ontario, Canada' /> </getRoute></lbs>";

4.

En el constructor, invoque Invoke.invokeApplication() utilizando la constante APP_TYPE_MAPS y un objeto MapsArguments nuevo como parmetros para abrir BlackBerry Maps. Pase la propiedad ARG_LOCATION_DOCUMENT y la variable String que representa el documento de ubicacin como parmetros para que la clase MapsArguments muestre la ruta indicada en el documento de ubicacin.
invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments (MapsArguments.ARG_LOCATION_DOCUMENT, document));

5.

Realice una de las tareas siguientes para borrar informacin de ubicacin de la ruta de un mapa un vez se haya mostrado: Tarea Borrar una ruta de un mapa. Pasos Cree un valor String que configure el atributo clear en el id del documento de ubicacin que contiene la informacin de la ruta.
String document = "<lbs clear='WatRoute'></lbs>";

Borrar todas las rutas de un mapa.

Cree un String que configure el atributo clear para que sea ROUTES.
String document = "<lbs clear='ROUTES'></lbs>";

Borrar toda la informacin de ubicacin y rutas de un Cree un String que configure el atributo clear para documento de ubicacin especfico con un atributo de que sea DOCS. identificacin.
String document = "<lbs clear='DOCS'></ lbs>";

Borrar toda la informacin de ubicacin y rutas de un Cree un String que configure el atributo clear para mapa. que sea ALL.

79

Gua de desarrollo

Abrir BlackBerry Maps utilizando una bsqueda local

String document = "<lbs clear='ALL'></ lbs>";

El contenido del mapa se borra antes de que se muestre en el mapa cualquier contenido nuevo. Puede combinar las acciones de mostrar y borrar contenido del mapa en un documento de ubicacin.
String document = "<lbs clear='WatRoute' id='NewRoute'><getRoute> <location x='-8051111' y='4341111' label='NewRoute #1' description='New Route #1' /> <location x='-7562222' y='4542222' label='NewRoute #2' description='New Route #2' /> </getRoute></lbs>";

Ejemplo de cdigo: Visualizar una ruta utilizando un documento de ubicacin


import net.rim.blackberry.api.invoke.*; public class invokeMaps { public invokeMaps () { String document = "<lbs id='WatRoute'><getRoute> <location x='-8052237' y='4346518' label='Waterloo, ON' description='Waterloo, Ontario, Canada' /> <location x='-7569792' y='4542349' label='Ottawa, ON' description='Ottawa, Ontario, Canada' /> </getRoute></lbs>"; Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, new MapsArguments (MapsArguments.ARG_LOCATION_DOCUMENT, document)); } }

Abrir BlackBerry Maps utilizando una bsqueda local


Puede abrir BlackBerry Maps para mostrar puntos de inters que estn cerca de la ubicacin que especifique en los criterios de bsqueda. Los criterios de bsqueda son un valor String que debe incluir una categora de empresa o un nombre de empresa y una ubicacin. Por ejemplo: puede mostrar todos los hoteles de la ciudad de Waterloo. Una categora de empresa es un tipo de empresa. Por ejemplo: una cafetera, gasolinera, hotel, pizzera o restaurante. La ubicacin es un valor String que es el nombre de una aldea, pueblo o ciudad, o las coordenadas de latitud y longitud, delimitadas por una coma (por ejemplo: 4328915,-8032480). Las coordenadas deben ser la medida en grados decimales con una exactitud de cinco decimales multiplicada por 100.000. 1. 2. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*;

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.

80

Gua de desarrollo

Utilizar documentos KML con BlackBerry Maps

public class invokeMaps { public invokeMaps() { } }

3.

En el constructor, cree una instancia de la clase MapsArguments. Pase el MapsArguments.ARG_LOCAL_SEARCH y los objetos String para representar los criterios de bsqueda. El ejemplo de cdigo siguiente busca hoteles en Waterloo.
MapsArguments ma = new MapsArguments (MapsArguments.ARG_LOCAL_SEARCH, "hotels", "Waterloo");

4.

En el constructor, invoque Invoke.invokeApplication() para abrir BlackBerry Maps. Pase el objeto MapsArguments.
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma);

Ejemplo de cdigo: Abrir BlackBerry Maps utilizando una bsqueda local


import net.rim.blackberry.api.invoke.*; public class invokeMaps { public invokeMaps() { MapsArguments ma = new MapsArguments (MapsArguments.ARG_LOCAL_SEARCH, "hotels", "Toronto"); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma); } }

Utilizar documentos KML con BlackBerry Maps


Puede utilizar un documento KML para almacenar informacin de la ubicacin sobre lugares, edificios, punto de inters, rutas de viaje, recorridos del autobs, carriles bicicleta, imgenes, etctera. Puede crear un documento KML, publicarlo en un sitio Web y verlo utilizando BlackBerry Maps. Para obtener ms informacin acerca del estndar KML, consulte la especificacin completa del estndar de codificacin KML OpenGIS o el material de referencia KML asociado.

Elementos KML compatibles


BlackBerry Maps es compatible con los siguientes elementos KML: Elemento KML
kml Document

Hijos vlidos ---

Compatible con BlackBerry Java Development Environment versin 4.6 o posterior BlackBerry JDE 5.0
81

Gua de desarrollo

Utilizar documentos KML con BlackBerry Maps

Elemento KML
address description name phoneNumber Style Placemark Placemark

Hijos vlidos Compatible con -BlackBerry JDE 5.0 -BlackBerry JDE 5.0 -BlackBerry JDE 5.0 -BlackBerry JDE 5.0 Icon, IconStyle, LineStyle, PolyStyle, BlackBerry JDE 5.0 color, href, width coordinates, Point BlackBerry JDE 4.6 coordinates, innerBoundaryIs, LinearRing, BlackBerry JDE 5.0 LineString, outerBoundaryIs, Point, Polygon, styleUrl

Crear un documento KML bsico


Puede crear un documento KML en cualquier editor de texto. Son necesarios el encabezado XML y la declaracin del espacio de nombre de KML al principio del documento. Puede marcar una posicin en un mapa de BlackBerry Maps utilizando el elemento <Placemark>. El elemento <Point> especifica la longitud, la latitud y la altitud de la ubicacin. La longitud va de -180 a + 180, la latitud va de -90 a + 90. La altitud es opcional y puede pasarse como 0. Si ofrece una altitud, el valor debe representar la altitud sobre el nivel del mar en metros. Ejemplo de cdigo: Crear un documento KML bsico
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>Ottawa</name> <description>Ottawa office</description> <Point> <coordinates>-90.86948943473118,48 .25450093195546,0</coordinates> </Point> </Placemark> </kml>

Visualizar superposiciones KML en BlackBerry Maps


En BlackBerry Maps, puede utilizar un documento KML para superponer una imagen en ubicaciones especficas de un mapa. En el documento KML, el elemento <Folder> organiza la informacin de superposicin. Puede utilizar el elemento <GroundOverlay> para colocar una imagen, incluida en el elemento <Icon>, sobre la ubicacin de un mapa. El elemento <LatLonBox> especifica dnde colocar la superposicin en el mapa. Puede repetir el bloque del elemento <GroundOverlay> para especificar nuevas superposiciones y coordenadas asociadas en el mapa. Ejemplo de cdigo: Visualizar superposiciones KML en BlackBerry Maps

82

Gua de desarrollo

Utilizar documentos KML con BlackBerry Maps

<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Folder> <name>Pictures</name> <visibility>0</visibility> <open>1</open> <GroundOverlay> <name>Glowing</name> <visibility>1</visibility> <description>Hot Spot</description> <Icon> <href>http://www.example.com/picture.png</href> <viewBoundScale>0.75</viewBoundScale> </Icon> <LatLonBox> <north>43.47685828285541</north> <south>43.47485739086753</south> <east>-80.53898253546113</east> <west>-80.54198566880086</west> </LatLonBox> </GroundOverlay> </Folder> </kml>

Invocar BlackBerry Maps utilizando un documento KML


Puede invocar BlackBerry Maps pasando un objeto MapsArguments que especifique la direccin URL de un documento KML. Antes de comenzar: Compruebe que ha creado un documento KML y que ha publicado el documento en un sitio Web. 1. 2. Importe las clases necesarias.
import net.rim.blackberry.api.invoke.*;

Cree una clase y un constructor que se utilizarn para invocar BlackBerry Maps.
public class invokeMaps { public invokeMaps() { } }

3.

En el constructor, cree una instancia de la clase MapsArguments. Pase el parmetro ARG_KML y la direccin URL del documento KML.
MapsArguments ma = new MapsArguments (MapsArguments.ARG_KML, "http://www.example.com/document.kml");

4.

En el constructor, invoque Invoke.invokeApplication() para abrir BlackBerry Maps. Pase el objeto MapsArguments.
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma);

83

Gua de desarrollo

Abrir BlackBerry Maps desde BlackBerry Browser.

Ejemplo de cdigo: Invocar BlackBerry Maps utilizando un documento KML


import net.rim.blackberry.api.invoke.*; public class invokeMaps { public invokeMaps() { MapsArguments ma = new MapsArguments (MapsArguments.ARG_KML, "http://www.example.com/document.kml"); Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, ma); } }

Abrir BlackBerry Maps desde BlackBerry Browser.


Puede utilizar BlackBerry Browser para abrir BlackBerry Maps y cargar un documento de ubicacin. Debe configurarse correctamente el tipo MIME del servidor Web. Los documentos de ubicacin tienen un tipo MIME de "text/vnd.rim.location.xloc".

84

Gua de desarrollo

Mapas personalizados

Mapas personalizados
Agregar un mapa a una aplicacin

Puede aadir un mapa a una aplicacin mediante la clase MapField y la clase RichMapField, proporcionadas en el paquete net.rim.device.api.lbs.maps.ui . Por ejemplo, puede crear una aplicacin que muestre un mapa con la ubicacin actual del usuario del dispositivo BlackBerry y los puntos de inters en el rea circundante. La clase MapField extiende la clase net.rim.device.api.ui.Field. Puede utilizar MapField para agregar la siguiente funcionalidad a su aplicacin: Representar un mapa en un campo de la interfaz de usuario Realizar panormicas y ampliar el mapa utilizando el teclado, el panel tctil, la bola de desplazamiento o tocando la pantalla

La clase RichMapField extiende la funcionalidad de MapField. Puede utilizar RichMapField para agregar las siguientes caractersticas a su aplicacin: Campos de utilidad en el mapa, por ejemplo, un destino central, un indicador de zoom y un campo de sugerencias Campos que se superponen sobre el mapa Punto focal compartido con otros componentes de la interfaz de usuario en una pantalla para permitir a los usuarios desplazarse por los componentes de los campos del mapa hacia otros componentes en la pantalla

Puede especificar el comportamiento del mapa cuando se muestra en un campo del mapa mediante los mtodos definidos en la clase MapAction. Por ejemplo, cuando la aplicacin abre y muestra el mapa, puede invocar setCentreAndZoom(MapPoint centre, int zoom) para configurar el centro y el nivel de zoom del mapa. De forma predeterminada, las coordenadas del centro son (0,0) y el nivel de zoom se configura en el valor mximo de 15. Puede identificar y responder a las acciones que el usuario lleva a cabo en un campo del mapa invocando addChangeListener() para registrar el campo del mapa como un servicio de escucha y, a continuacin, utilizar las constantes definidas en la clase MapAction. Por ejemplo, MapAction.ACTION_ZOOM_CHANGE indica que el usuario ha cambiado el nivel de zoom. Cada una de las instancias MapField o RichMapField utiliza un subproceso para representar un mapa. Por ejemplo, si una aplicacin tiene dos instancias MapField que se ejecutan al mismo tiempo, se utilizan dos subprocesos. El subproceso termina cuando la instancia MapField se procesa para la recogida de datos desechables. Debe asegurarse de que la aplicacin no excede el lmite de subprocesos disponibles. Para finalizar el subproceso para la instancias MapField o RichMapField, debe invocar close(), que elimina el campo como un servicio de escucha de clases especficas y permite el procesamiento de todas las clases para la recogida de datos desechables. Ejemplo de cdigo: agregar un mapa mediante la clase MapField
MapField map = new MapField(); add(map);

Ejemplo de cdigo: agregar un mapa mediante la clase RichMapField

85

Gua de desarrollo

Agregar un mapa a una aplicacin

RichMapField map = MapFactory.getInstance().generateRichMapField(); add(map);

Ejemplo de cdigo: responder a los cambios en MapField


class MapFieldListener implements FieldChangeListener { public MapFieldListener () { MapField map = new MapField(); map.addChangeListener(this); } public void fieldChanged( Field field, int actionId ) { switch ( actionId ) { case MapAction.ACTION_CENTRE_CHANGE: break; case MapAction.ACTION_ZOOM_CHANGE: break; } } }

Agregar un mapa a una aplicacin


Los siguientes pasos describen cmo agregar un mapa a una aplicacin del dispositivo BlackBerry mediante la clase RichMapField y cmo configurar el centro y el nivel de zoom del mapa. El mapa resultante en la aplicacin se muestra en la siguiente imagen:

1.

Importe las clases y las interfaces necesarias.


import import import import import net.rim.device.api.lbs.maps.*; net.rim.device.api.lbs.maps.model.*; net.rim.device.api.lbs.maps.ui.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*;

86

Gua de desarrollo

Agregar un mapa a una aplicacin

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MapScreen que se describe en el paso 3, representa la pantalla personalizada.
public class RichMapFieldDemo extends UiApplication { public static void main(String[] args) { RichMapFieldDemo theApp = new RichMapFieldDemo(); theApp.enterEventDispatcher(); } public RichMapFieldDemo() { pushScreen(new MapScreen()); } }

3.

Cree el marco de la pantalla personalizada ampliando la clase FullScreen. En el constructor, invoque super () para crear un men predeterminado.
class MapScreen extends FullScreen { public MapScreen() { super( FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU ); } }

4.

En el constructor de pantalla, invoque MapFactory.getInstance() para crear una instancia de la clase MapFactory y, a continuacin, invoque generateRichMapField() para generar el RichMapField.
RichMapField map = MapFactory.getInstance().generateRichMapField();

5.

En el constructor de pantalla, invoque getAction() para crear una instancia de la clase MapAction. Invoque setCentreAndZoom() para especificar el centro y el nivel de zoom del mapa. Invoque add() para agregar el campo a la pantalla.
MapAction action = map.getAction(); action.setCentreAndZoom(new MapPoint(43.47462, -80.53820), 2); add(map);

Ejemplo de cdigo: agregar un mapa a una aplicacin


import net.rim.device.api.lbs.maps.*; import net.rim.device.api.lbs.maps.model.*; import net.rim.device.api.lbs.maps.ui.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; public class RichMapFieldDemo extends UiApplication { public static void main(String[] args) {

87

Gua de desarrollo

Especificar ubicaciones en un mapa

} class MapScreen extends FullScreen { public MapScreen() { super( FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU ); RichMapField map = MapFactory.getInstance().generateRichMapField(); MapAction action = map.getAction(); action.setCentreAndZoom(new MapPoint(43.47462, -80.53820), 2); add(map); } }

} public RichMapFieldDemo() { pushScreen(new MapScreen()); }

RichMapFieldDemo theApp = new RichMapFieldDemo(); theApp.enterEventDispatcher();

Especificar ubicaciones en un mapa


Puede especificar una ubicacin en un mapa mediante la clase MapPoint proporcionada en el paquete net.rim.device.api.lbs.maps.model . MapPoint representa las coordenadas geogrficas (latitud y longitud) de una ubicacin. Puede utilizar MapPoint para centrar la vista del mapa y mostrar una ubicacin especfica (por ejemplo, puede configurar la ubicacin central del mapa). Su aplicacin puede mostrar un icono marcador para identificar una ubicacin en un mapa mediante la clase MapLocation . MapLocation es una extensin de MapPoint. MapLocation representa las coordenadas geogrficas (latitud y longitud), una etiqueta y una descripcin de la ubicacin y genera un icono marcador (una chincheta roja) para la ubicacin. Puede utilizar MapLocation para proporcionar un punto de inters en un mapa para una latitud y longitud especficas (por ejemplo, una ciudad). El mapa muestra un icono marcador y una etiqueta (por ejemplo, "Waterloo") para la ubicacin. Si el usuario hace clic en la ubicacin, la descripcin de la ubicacin (por ejemplo, "Esto es Waterloo") aparece en una pantalla de detalles independiente.

88

Gua de desarrollo

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa

Ejemplo de cdigo: especificar una ubicacin mediante la clase MapLocation


MapLocation location = new MapLocation(43.46518, -80.52237, "Waterloo", "This is Waterloo");

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa


Puede asignar etiquetas a las ubicaciones almacenadas en una clase MapDataModel . Cada clase MapField tiene una instancia MapDataModel asociada. La clase MapDataModel, proporcionada en el paquete net.rim.device.api.lbs.maps.model , representa un contenedor. Puede agregar ubicaciones y datos asociados para las ubicaciones al contenedor invocando MapDataModel.add(). Cualquier elemento y sus datos asociados se consideran elementos asignables en el contenedor. Puede agrupar los elementos asignables mediante la asignacin de etiquetas a los elementos (por ejemplo, todas las ubicaciones de trabajo tendr una etiqueta "trabajo"). Puede invocar MapDataModel.add() o MapDataModel.tag() para etiquetar elementos asignables en un contenedor MapDataModel. El mtodo add() le permite agregar un elemento asignable al contenedor y le permite especificar una etiqueta para el elemento. El mtodo tag() le permite especificar una etiqueta para un nico elemento asignable que se encuentre en el contenedor. Varias ubicaciones pueden tener la misma etiqueta (por ejemplo, todas las oficinas de RIM pueden etiquetarse como "RIM") y una nica ubicacin puede tener varias etiquetas (por ejemplo, un domicilio puede tener etiquetas tanto para "Sarah" como para "Paul"). Puede especificar qu elementos etiquetados de los que se almacenan en MapDataModel estn visibles u ocultos en un mapa. De forma predeterminada, todos los elementos en MapDataModel estn visibles. Por ejemplo, puede agregar la etiqueta "parque" a varias ubicaciones y puede especificar que slo las ubicaciones con la etiqueta "parque" se muestren en el mapa. Puede especificar los elementos que estn visibles en el mapa invocando en primer lugar MapDataModel.setVisibleNone() para desactivar la visibilidad de todos los elementos y, a continuacin, invocando MapDataModel.setVisible() para activar la visibilidad de los elementos especificados. Ejemplo de cdigo: etiquetar ubicaciones mediante el mapa MapDataModel.add() En el siguiente ejemplo de cdigo, se definen tres ubicaciones y, a continuacin, se agregan y etiquetan invocando el mtodo MapDataModel.add(). Slo las ubicaciones que tienen una etiqueta "RIM" estn visibles en el mapa.
MapDataModel model = map.getModel(); MapLocation office01 = new MapLocation( 43.47550, -80.53900, "Head Office", null ); MapLocation office02 = new MapLocation( 43.48261, -80.54169, "Manufacturing", null ); MapLocation justinHome = new MapLocation( 43.47751, -80.54817, "Justin - Home", null); model.add( (Mappable) office01, "RIM"); model.add( (Mappable) office02, "RIM"); model.add( (Mappable) justinHome, "home"); model.setVisibleNone(); model.setVisible( "RIM" );

89

Gua de desarrollo

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa


Los siguientes pasos describen cmo asignar etiquetas a elementos asignables que se almacenan en una clase MapDataModel . La visibilidad se configura para mostrar las ubicaciones que tienen la etiqueta "trabajo". El mapa resultante de la aplicacin se muestra en la siguiente imagen:

1.

Importe las clases y las interfaces necesarias.


import import import import import net.rim.device.api.lbs.maps.*; net.rim.device.api.lbs.maps.model.*; net.rim.device.api.lbs.maps.ui.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. MapTagScreen, que se describe en el paso 3, representa la pantalla personalizada.
public class MapTaggingDemo extends UiApplication { public static void main(String[] args) { MapTaggingDemo theApp = new MapTaggingDemo(); theApp.enterEventDispatcher(); } public MapTaggingDemo() { pushScreen(new MapTagScreen()); } }

3.

Cree el marco de la pantalla personalizada ampliando la clase FullScreen. En el constructor, invoque super () para crear un men predeterminado.
class MapTagScreen extends FullScreen { public MapTagScreen()

90

Gua de desarrollo

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa

super(FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU | FullScreen.VERTICAL_SCROLL | FullScreen.VERTICAL_SCROLLBAR);

4.

En el constructor de pantalla, invoque MapFactory.getInstance() para crear una instancia de la clase MapFactory y, a continuacin, invoque generateRichMapField() para generar el campo de mapa. Invoque RichMapField para agregar la instancia add() a la pantalla.
RichMapField map = MapFactory.getInstance().generateRichMapField(); add(map);

5. 6.

Invoque getModel() para crear una instancia de la clase MapDataModel.


MapDataModel data = map.getModel();

Cree las instancias de la clase MapLocation para definir las ubicaciones. Pase la latitud, la longitud, la etiqueta y la descripcin de cada ubicacin a los objetos MapLocation.
MapLocation julieHome = new MapLocation( 43.47751, -80.54817, "Julie - Home", null ); MapLocation headOffice = new MapLocation( 43.47550, -80.53900, "Head Office", null );

7.

Cree un identificador de nmero entero para representar un elemento asignable. Asigne el elemento asignable al identificador invocando add() para agregar una ubicacin y pasar uno de los objetos MapLocation y una etiqueta para la ubicacin a MapDataModel. Puede utilizar el identificador para acceder al elemento en MapDataModel y asignar otra etiqueta a un elemento asignable invocando tag() y pasando como argumentos el identificador y la etiqueta. En el siguiente ejemplo de cdigo, se han agregado dos ubicaciones a MapDataModel y a cada ubicacin se le han asignado dos etiquetas.
int julieHomeId = data.add( (Mappable) julieHome, "julie" ); data.tag( julieHomeId, "home" ); int headOfficeId = data.add( (Mappable) headOffice, "julie" ); data.tag( headOfficeId, "work" );

8.

Defina dos ubicaciones ms e invoque add() para agregar las ubicaciones a MapDataModel. Invoque tag() para asignar las etiquetas adecuadas a las ubicaciones.
MapLocation paulHome = new MapLocation( 43.49487, -80.55335, "Paul Home", null ); int paulHomeId = data.add( (Mappable) paulHome, "paul" ); data.tag( paulHomeId, "home" ); data.tag( headOfficeId, "paul" ); data.tag( paulHomeId, "sarah" ); MapLocation manufacturing = new MapLocation( 43.46514, -80.50506, "Manufacturing", null ); int manufacturingId = data.add( (Mappable) manufacturing, "sarah" ); data.tag( manufacturingId, "work" );

9.

Active la visibilidad para las ubicaciones que tienen la etiqueta "trabajo". De forma predeterminada, todas las ubicaciones estarn visibles en el mapa. Invoque setVisibleNone() para desactivar la visibilidad de todas las ubicaciones. Invoque setVisible() y pase la etiqueta "trabajo" como argumento para especificar que slo las ubicaciones con la etiqueta "trabajo" estn visibles en el mapa.

91

Gua de desarrollo

Etiquetar y configurar la visibilidad de las ubicaciones en un mapa

data.setVisibleNone(); data.setVisible( "work" );

10. Invoque getMapField().update() para actualizar la vista de mapa. Pase el valor booleano true al mtodo update para calcular de nuevo el centro y el nivel de zoom del mapa con las ubicaciones visibles en el mapa.
map.getMapField().update(true);

Ejemplo de cdigo: etiquetar y configurar la visibilidad de las ubicaciones en un mapa


El siguiente ejemplo de cdigo crea un mapa, asigna etiquetas a varias ubicaciones y muestra slo las ubicaciones que tienen una etiqueta "trabajo".
import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.lbs.maps.*; import net.rim.device.api.lbs.maps.model.*; import net.rim.device.api.lbs.maps.ui.*; public class MapTaggingDemo extends UiApplication { public static void main(String[] args) { MapTaggingDemo theApp = new MapTaggingDemo(); theApp.enterEventDispatcher(); } public MapTaggingDemo() { pushScreen(new MapTagScreen()); } } class MapTagScreen extends FullScreen { public MapTagScreen() { super(FullScreen.DEFAULT_CLOSE | FullScreen.DEFAULT_MENU | FullScreen.VERTICAL_SCROLL | FullScreen.VERTICAL_SCROLLBAR); RichMapField map = MapFactory.getInstance().generateRichMapField(); add(map); MapDataModel data = map.getModel(); MapLocation julieHome = new MapLocation( 43.47751, -80.54817, "Julie Home", null ); MapLocation headOffice = new MapLocation( 43.47550, -80.53900, "Head Office", null ); int julieHomeId = data.add( (Mappable) julieHome, "julie" ); data.tag( julieHomeId, "home" ); int headOfficeId = data.add( (Mappable) headOffice, "julie" ); data.tag( headOfficeId, "work" ); MapLocation paulHome = new MapLocation( 43.49487, -80.55335, "Paul - Home", null ); int paulHomeId = data.add( (Mappable) paulHome, "paul" ); data.tag( paulHomeId, "home" ); data.tag( headOfficeId, "paul" ); data.tag( paulHomeId, "sarah" ); 92

Gua de desarrollo

Crear una imagen esttica de un mapa

MapLocation manufacturing = new MapLocation( 43.46514, -80.50506, "Manufacturing", null ); int manufacturingId = data.add( (Mappable) manufacturing, "sarah" ); data.tag( manufacturingId, "work" ); data.setVisibleNone(); data.setVisible( "work" ); map.getMapField().update( true );

Crear una imagen esttica de un mapa


Puede crear una imagen esttica de un mapa invocando MapField.getImage() , proporcionado en el paquete net.rim.device.api.lbs.maps.ui , o MapFactory.generateStaticImage() , proporcionado en el paquete net.rim.device.api.lbs.maps . Puede invocar MapField.getImage() para capturar una imagen de la vista del mapa actual en la pantalla, incluido cualquier dato que sea visible en el mapa. MapField.getImage() se utiliza para capturar imgenes en aplicaciones de interfaz de usuario en las que el mapa es un campo de la pantalla. Por ejemplo, en una aplicacin que muestre un mapa de puntos de inters, puede proporcionar un botn en el que el usuario del dispositivo BlackBerry haga clic para guardar una imagen del mapa actual. Puede invocar MapFactory.generateStaticImage() para crear una imagen de un mapa en las situaciones siguientes: Para crear una imagen de la vista del mapa actual en la pantalla en una aplicacin que no sea de la interfaz de usuario (por ejemplo, en una aplicacin que enva actualizaciones peridicas de la ubicacin de una persona a una direccin de correo electrnico) Para crear una imagen de un mapa que no permite la interaccin del usuario como panormica y zoom (por ejemplo, en una aplicacin de contactos para proporcionar una imagen del mapa del domicilio particular del contacto) Los mtodos generateStaticImage() en la clase MapFactory proporcionan control sobre las coordenadas de centro y nivel de zoom de la imagen y calculan las coordenadas segn los elementos asignables proporcionados. Mtodo
generateStaticMapImage (MapDimensions mapProperties, MappableVector data) generateStaticMapImage (MapDimensions mapProperties, MapDataModel data) generateStaticMapImage (XYDimension imageSize, MappableVector data)

Descripcin Este mtodo utiliza una clase MappableVector y proporciona a la aplicacin control sobre las coordenadas de centro y nivel de zoom de la imagen del mapa. Este mtodo utiliza una clase MapDataModel y proporciona a la aplicacin control sobre las coordenadas de centro y nivel de zoom de la imagen del mapa. Este mtodo calcula el centro y nivel de zoom de la imagen segn los datos asignados en MappableVector.

93

Gua de desarrollo

Agregar campos sobre un mapa

Ejemplo de cdigo: crear una imagen esttica de un mapa en una aplicacin de la interfaz de usuario
// add the data to a collection MapDataModel data = new MapDataModel(); data.add( (Mappable) new MapLocation( 43.47550, -80.53900, "Andrew", null ) ); data.add( (Mappable) new MapLocation( 43.48261, -80.54169, "Blake", null ) ); data.add( (Mappable) new MapLocation( 43.47751, -80.54817, "Christine", null ) ); // create the map and specify the map size MapField map = new MapField(data, 200, 200); // create the image Bitmap image = map.getImage();

Ejemplo de cdigo: crear una imagen esttica de un mapa (se calculan el centro y nivel de zoom del mapa)
// add the data to a collection MappableVector data = new MappableVector(); data.addElement( new MapLocation( 43.47550, -80.53900, "Andrew", null ) ); data.addElement( new MapLocation( 43.48261, -80.54169, "Blake", null ) ); data.addElement( new MapLocation( 43.47751, -80.54817, "Christine", null ) ); // specify the size of the resulting image XYDimension imageSize = new XYDimension( 200, 100 ); // create the image Bitmap map = MapFactory.getInstance().generateStaticMapImage( imageSize, data );

Ejemplo de cdigo: crear una imagen esttica de un mapa (se especifican el centro y nivel de zoom del mapa)
// add the data to a collection MapDataModel data = new MapDataModel(); MapLocation andrew = new MapLocation(43.47550, -80.53900, "Andrew", null ); data.add( (Mappable) andrew ); data.add( (Mappable) new MapLocation( 43.48261, -80.54169, "Blake", null ) ); data.add( (Mappable) new MapLocation( 43.47751, -80.54817, "Christine", null ) ); // visibility for this location is false and it will not display on the map data.add( (Mappable) new MapLocation( 43.49487, -80.55335, "Dustin", null), null, false ); // specify the image size, center and zoom level MapDimensions dim = new MapDimensions( 200, 100 ); dim.setCentre( andrew ); dim.setZoom( 3 ); // create the image Bitmap map = MapFactory.getInstance().generateStaticMapImage( dim, data );

Agregar campos sobre un mapa


Puede utilizar la clase RichMapField para mostrar un mapa, dicho mapa puede formar parte de una pantalla que incluya uno o ms componentes de la interfaz de usuario. Puede agregar campos que no formen parte del mapa invocando RichMapField.add(). Los campos son superposiciones que no se representan directamente en el mapa. Si la instancia RichMapField se encuentra en un contenedor que contiene a su vez otros componentes de la interfaz de usuario (por ejemplo, en un cuadro de dilogo), de forma predeterminada, RichMapField compartir el punto focal con el resto de los componentes de la interfaz de usuario, lo cual permitir al usuario del dispositivo BlackBerry moverse desde RichMapField a los otros componentes de la interfaz de usuario en la pantalla. Si desea convertir
94

Gua de desarrollo

Mostrar superposiciones KML en un mapa

RichMapField en un campo exclusivo en la pantalla (por ejemplo, que el mapa se muestre a pantalla completa), debe desactivar el punto focal compartido invocando disableOperationMode (MapConstants.MODE_SHARED_FOCUS).

Puede utilizar MapConstants.MODE_FOCUS_ACTIVE para especificar que RichMapField tenga punto focal y que comparta aun as el punto focal con otros componentes de la interfaz de usuario. Si RichMapField tiene punto focal, RichMapField consume de forma activa todos los eventos de entrada, por ejemplo, un usuario que haga clic en el panel tctil. El otorgar un punto focal a RichMapField permite al usuario realizar una panormica y ampliar el mapa sin salir de manera inadvertida del mapa y trasladarse a otros componentes de la pantalla. Si RichMapField no dispone de punto focal, RichMapField no consumir ningn evento de entrada y el usuario podr realizar la panormica del mapa y mover el punto focal a otro campo en la pantalla. Para obtener ms informacin acerca de los componentes de la interfaz de usuario, consulte la Gua de referencia rpida de componentes de la interfaz de usuario de BlackBerry Java SDK. Ejemplo de cdigo: agregar un campo sobre un mapa
RichMapField map = MapFactory.getInstance().generateRichMapField(); ButtonField button = new ButtonField( "Click Here", Field.FOCUSABLE); button.setChangeListener( new FieldChangeListener() { public void fieldChanged( Field field, int context ) { Dialog.alert( "Button clicked." ); } } ); map.add( button, 50, 50 );

Ejemplo de cdigo: configurar RichMapField como campo exclusivo en la pantalla


RichMapField richMapField = MapFactory.getInstance().generateRichMapField(); MapField map = richMapField.getMapField(); map.getAction().disableOperationMode( MapConstants.MODE_SHARED_FOCUS );
Informacin relacionada Agregar un mapa a una aplicacin, 85

Mostrar superposiciones KML en un mapa


Los documentos KML son documentos basados en XML que puede utilizar para almacenar datos geogrficos acerca de lugares, edificios, puntos de inters, carriles para bicicleta, imgenes, etc. Puede crear y publicar un documento KML en un sitio Web. Puede mostrar los datos KML en un campo del mapa especificando la URL del documento KML en el mtodo MapFactory.populateDataModelFromKmlUrl(MapDataModel model, String url, String tag) .

95

Gua de desarrollo

Mostrar superposiciones KML en un mapa

La aplicacin puede mostrar datos KML en un campo del mapa slo si el documento KML se recupera a travs de BlackBerry Internet Service o a travs de BlackBerry Enterprise Server (por ejemplo, un documento KML que se encuentre almacenado en un sitio Web o en un sitio de intranet). Un documento KML almacenado en un dispositivo BlackBerry (por ejemplo, en una tarjeta de memoria) no se puede mostrar. Ejemplo de cdigo: mostrar una superposicin KML
String officeTag = "RIM offices"; String officeUrl = "http://www.example.com/rim_offices.kml"; //create the map field RichMapField view = MapFactory.getInstance().generateRichMapField(); // retrieve the KML document and populate the data model MapDataModel model = view.getModel(); MapFactory.getInstance().populateDataModelFromKmlUrl( model, officeUrl, officeTag ); // display only the RIM offices and center the view on the visible locations model.setVisibleNone(); model.setVisible( officeTag ); view.getMapField().update( true );
Informacin relacionada Crear un documento KML bsico, 82 Elementos KML compatibles, 81

96

Gua de desarrollo

Navegacin

Navegacin
Recuperar la duracin y distancia estimadas del viaje

Puede solicitar la duracin estimada del viaje y la distancia del mismo para un viaje en automvil a destinos de Estados Unidos y Canad utilizando la API de duracin del viaje, proporcionada en el paquete net.rim.device.api.lbs.travel. Por ejemplo, puede crear una aplicacin de redes sociales que proporcione al usuario del dispositivo BlackBerry la hora estimada de llegada a la ubicacin de un amigo. La solicitud de duracin y distancia estimadas del viaje se reenva a un servidor de duracin del viaje que traza una ruta entre las ubicaciones de partida y destino. El servidor de duracin del viaje utiliza informacin actual y anterior del trfico para calcular la duracin y distancia estimadas del viaje. Puede crear una solicitud mediante la creacin de una instancia de la clase TravelTimeEstimator y especificar las coordenadas geoespaciales de las ubicaciones de partida y destino y la hora de partida del viaje. Puede utilizar la hora actual o una hora futura para la hora de partida del viaje. TravelTimeEstimator es una clase de instancia nica que es compatible con solicitudes sncronas y asncronas. Una solicitud sncrona bloquea los procesos del subproceso actual hasta que la solicitud devuelva la duracin y distancia estimadas o arroje una excepcin. Una solicitud asncrona vuelve al subproceso una vez enva una solicitud de estimacin. Los resultados se devuelven de forma asncrona al objeto del servicio de escucha proporcionado por el autor de la llamada. Debe solicitar la duracin y la distancia estimadas del viaje de forma asncrona para que la solicitud no bloquee el subproceso actual. TravelTimeEstimator devuelve los resultados utilizando una instancia de la clase TravelTime.

Recuperar la duracin y distancia estimadas del viaje


Puede crear una aplicacin que recupere la duracin y la distancia estimadas que se tarda en desplazarse entre dos ubicaciones. En los siguientes pasos, se crea una aplicacin de interfaz de usuario que contiene un campo de texto en el que el usuario del dispositivo BlackBerry escribe una direccin de destino, un botn en el que el usuario hace clic para recuperar la duracin y la distancia estimadas para alcanzar el destino y un campo para mostrar los resultados. Antes de comenzar: Asegrese de que el dispositivo BlackBerry o BlackBerry Smartphone Simulator tienen la tecnologa GPS activada. 1. Importe las clases y las interfaces necesarias.
import import import import import import import net.rim.device.api.lbs.Locator; net.rim.device.api.lbs.travel.*; net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; javax.microedition.location.*;

97

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase TravelTimeScreen, descrita en el paso 3, representa la pantalla personalizada.
public final class MyTravelTimeDemo extends UiApplication { public static void main(String[] args) { MyTravelTimeDemo theApp = new MyTravelTimeDemo(); theApp.enterEventDispatcher(); } public MyTravelTimeDemo() { pushScreen(new TravelTimeScreen()); } }

3.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen.


class TravelTimeScreen extends MainScreen { private BasicEditField _destinationField; private LabelField _timeLabel; private LabelField _distanceLabel;

4.

En el constructor, invoque super() para crear un men predeterminado. Invoque setTitle() para especificar el ttulo de la pantalla. Cree una instancia de la clase BasicEditField para crear un campo de texto para que el usuario escriba el destino en l. Invoque add() para agregar el campo a la pantalla. Cree una instancia de la clase ButtonField para crear un botn para recuperar la duracin del viaje y la distancia estimadas. Invoque Field.setChangeListener() para escuchar los cambios en el botn. Invoque findTravelTime(), que se describe en el paso 5, para recuperar la duracin del viaje y la distancia estimadas cuando el usuario haga clic en el botn. Invoque add() para agregar el botn a la pantalla. Cree instancias de la clase LabelField para mostrar los resultados de duracin del viaje y la distancia.
public TravelTimeScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Travel Time Demo" , Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); this._destinationField = new BasicEditField("Destination: ", "", 500, TextField.NO_NEWLINE); add(this._destinationField); ButtonField travelButton = new ButtonField("Get Travel Estimate", ButtonField.CONSUME_CLICK); travelButton.setChangeListener(new FieldChangeListener() { public void fieldChanged(Field field, int context) { findTravelTime(); } }); add(travelButton); this._timeLabel = new LabelField();

98

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

add(this._timeLabel); this._distanceLabel = new LabelField(); add(this._distanceLabel);

5.

Cree un mtodo en la clase TravelTimeScreen para proporcionar la estimacin de la duracin del viaje. Cree una instancia de la clase String que invoque getText() para recuperar el destino que el usuario ha escrito. Compruebe que el campo no est vaco buscando un valor null o una longitud de 0 en el campo destination. Desactive los campos de resultados de la duracin del viaje y la distancia.
private void findTravelTime() { final String destination = this._destinationField.getText(); if ((destination == null) || (destination.length() == 0)) { Dialog.alert("Destination field cannot be empty"); return; } this._timeLabel.setText(""); this._distanceLabel.setText("");

6.

Recupere las coordenadas geoespaciales para las ubicaciones de partida y destino, creando en primer lugar una instancia de la clase Thread en el mtodo findTravelTime que invoque run(). En run(), en un bloque try/catch, invoque Locator.geocode() y pase como parmetro el destino String para buscar la direccin y devolver una matriz de objetos Landmark. Invoque Landmark.getQualifiedCoordinates() para recuperar las coordenadas geoespaciales del destino mediante el servicio de geoubicacin. Invoque LocationProvider.getInstance() para recuperar un proveedor de ubicacin y solicitar la ubicacin actual. Invoque Location.getQualifiedCoordinates() para recuperar las coordenadas geoespaciales de la ubicacin actual mediante GPS. De forma alternativa, si no hay GPS disponible, puede utilizar el servicio de geoubicacin para recuperar las coordenadas de la ubicacin actual.
Thread travelTimeThread = new Thread() { public void run() { try { final Landmark[] landmarks = Locator.geocode(destination.replace('\n', ' '), null); Coordinates endPoint = landmarks[0].getQualifiedCoordinates(); LocationProvider provider = LocationProvider.getInstance(null); if (provider == null) { throw new IllegalStateException("no LocationProvider available"); } Coordinates startPoint = provider.getLocation(-1).getQualifiedCoordinates();

7.

Cree una instancia de la clase TravelTimeEstimator invocando TraveTimeEstimator.getInstance(). Invoque requestArrivalEstimate() para solicitar la duracin y la distancia estimadas del viaje. Especifique los objetos Coordinates para las ubicaciones de partida y destino y especificar la hora de partida. En este

99

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

ejemplo, se ha realizado una solicitud sncrona porque se ha creado un subproceso independiente para recuperar las coordenadas geoespaciales. Puede utilizar la constante TravelTime.START_NOW para indicar que el viaje comienza inmediatamente. Invoque showResults(), descrito en el paso 8, para mostrar los resultados.
TravelTimeEstimator estimator = TravelTimeEstimator.getInstance(); final TravelTime travelTime = estimator.requestArrivalEstimate(startPoint, endPoint, TravelTime.START_NOW, null); showResults(travelTime);

8.

En el mtodo showResults, invoque invokeLater() para agregar esta seccin de cdigo a la cola de eventos de la aplicacin. Cree una instancia de la clase Runnable y psela como parmetro a invokeLater(). Omita run() en la definicin de Runnable. Invoque getElapsedTime() para recuperar la duracin estimada del viaje. Convierta el valor de duracin del viaje de milisegundos al formato hora: minutos: segundos. Invoque getDistance() para recuperar la distancia estimada del viaje. Convierta las distancias devueltas de metros a kilmetros. Invoque setText() para mostrar los resultados de duracin y distancia del viaje.
private void showResults(final TravelTime travelTime) { Application.getApplication().invokeLater(new Runnable() { public void run() { long value = travelTime.getElapsedTime() / 1000; long seconds = value % 60; value /= 60; long minutes = value % 60; long hours = value / 60; StringBuffer buffer = new StringBuffer(); buffer.append(hours); buffer.append(':'); if (minutes < 10) { buffer.append('0'); } buffer.append(minutes); buffer.append(':'); if (seconds < 10) { buffer.append('0'); } buffer.append(seconds); String msg = "Travel Time (h:m:s): " + buffer.toString(); TravelTimeScreen.this._timeLabel.setText(msg); double distance = travelTime.getDistance() / 1000.0; msg = "Distance (km): " + Double.toString(distance); TravelTimeScreen.this._distanceLabel.setText(msg); } }); }

100

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

Ejemplo de cdigo: recuperar la duracin y distancia estimadas del viaje


import net.rim.device.api.lbs.Locator; import net.rim.device.api.lbs.travel.*; import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import javax.microedition.location.*; public final class MyTravelTimeDemo extends UiApplication { public static void main(String[] args) { MyTravelTimeDemo theApp = new MyTravelTimeDemo(); theApp.enterEventDispatcher(); } public MyTravelTimeDemo() { pushScreen(new TravelTimeScreen()); } } class TravelTimeScreen extends MainScreen { private BasicEditField _destinationField; private LabelField _timeLabel; private LabelField _distanceLabel; public TravelTimeScreen() { super(DEFAULT_CLOSE | DEFAULT_MENU); setTitle(new LabelField("Travel Time Demo" , Field.USE_ALL_WIDTH | DrawStyle.HCENTER)); this._destinationField = new BasicEditField("Destination: ", "", 500, TextField.NO_NEWLINE); add(this._destinationField); ButtonField travelButton = new ButtonField("Get Travel Estimate", ButtonField.CONSUME_CLICK); travelButton.setChangeListener(new FieldChangeListener() { public void fieldChanged(Field field, int context) { findTravelTime(); } }); add(travelButton); this._timeLabel = new LabelField(); add(this._timeLabel); this._distanceLabel = new LabelField(); add(this._distanceLabel); } private void findTravelTime() { final String destination = this._destinationField.getText(); if ((destination == null) || (destination.length() == 0)) { Dialog.alert("Destination field cannot be empty"); 101

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

} private void showResults(final TravelTime travelTime) { Application.getApplication().invokeLater(new Runnable() { public void run() { long value = travelTime.getElapsedTime() / 1000; long seconds = value % 60; value /= 60; long minutes = value % 60; long hours = value / 60; StringBuffer buffer = new StringBuffer(); buffer.append(hours); buffer.append(':'); if (minutes < 10) { buffer.append('0'); } buffer.append(minutes); buffer.append(':');

return; } this._timeLabel.setText(""); this._distanceLabel.setText(""); Thread travelTimeThread = new Thread() { public void run() { try { final Landmark[] landmarks = Locator.geocode(destination.replace('\n', ' '), null); Coordinates endPoint = landmarks[0].getQualifiedCoordinates(); LocationProvider provider = LocationProvider.getInstance(null); if (provider == null) { throw new IllegalStateException("no LocationProvider available"); } Coordinates startPoint = provider.getLocation(-1).getQualifiedCoordinates(); TravelTimeEstimator estimator = TravelTimeEstimator.getInstance(); final TravelTime travelTime = estimator.requestArrivalEstimate(startPoint, endPoint, TravelTime.START_NOW, null); showResults(travelTime); } catch (final Exception e) { Dialog.alert(e.getMessage()); } } }; travelTimeThread.start();

102

Gua de desarrollo

Recuperar la duracin y distancia estimadas del viaje

});

if (seconds < 10) { buffer.append('0'); } buffer.append(seconds); String msg = "Travel Time (h:m:s): " + buffer.toString(); TravelTimeScreen.this._timeLabel.setText(msg); double distance = travelTime.getDistance() / 1000.0; msg = "Distance (km): " + Double.toString(distance); TravelTimeScreen.this._distanceLabel.setText(msg);

103

Gua de desarrollo

Obtener ms informacin

Obtener ms informacin

www.blackberry.com/go/apiref: consulte la ltima versin de la referencia de la API para BlackBerry Java SDK. www.blackberry.com/go/devguides: encuentre guas de desarrollo, notas de la versin y descripciones generales de la aplicacin de ejemplo de BlackBerry Java SDK. www.blackberry.com/developers: visite BlackBerry Developer Zone para consultar recursos sobre el desarrollo de aplicaciones de dispositivos BlackBerry. www.blackberry.com/go/developerkb: consulte los artculos de la base de conocimientos para desarrolladores de BlackBerry. www.blackberry.com/developers/downloads: encuentre las ltimas herramientas de desarrollo y descargas para desarrollar aplicaciones de dispositivos BlackBerry.

104

Gua de desarrollo

Glosario

Glosario
API Application Programming Interface (Interfaz de programacin de aplicaciones) CDMA Code Division Multiple Access (Acceso mltiple por divisin de cdigos) GPS Global Positioning System (Sistema de posicionamiento global) HTTP Hypertext Transfer Protocol (Protocolo de transferencia de hipertexto)

Poltica de TI La poltica de TI consiste en varias reglas de poltica de TI que controlan las caractersticas de seguridad y el comportamiento de los dispositivos BlackBerry, de los dispositivos activados para BlackBerry, de BlackBerry Desktop Software y de BlackBerry Web Desktop Manager. JSR Java Specification Request KML Keyhole Markup Language (Lenguaje de marcado de keyhole) MIME Multipurpose Internet Mail Extensions (Extensiones multiuso del correo de Internet) NMEA National Marine Electronics Association (Asociacin Electrnica Martima Nacional) PDE Position Determination Entity (Entidad para la determinacin de posicin) WLAN wireless local area network (red inalmbrica de rea local) XML Extensible Markup Language (Lenguaje de marcado extensible)

105

Gua de desarrollo

Comentarios

Comentarios
Para ofrecer comentarios acerca de esta entrega, visite www.blackberry.com/docsfeedback.

10

106

Gua de desarrollo

Historial de revisin del documento

Historial de revisin del documento


Fecha 3 de septiembre de 2010 Descripcin Se cambiaron los temas siguientes:

11

Agregar un mapa a una aplicacin Crear una imagen esttica de un mapa Etiquetar y configurar la visibilidad de las ubicaciones en un mapa Etiquetar y configurar la visibilidad de las ubicaciones en un mapa Ejemplo de cdigo: agregar un mapa a una aplicacin Ejemplo de cdigo: etiquetar y configurar la visibilidad de las ubicaciones en un mapa

16 de agosto de 2010 Se agregaron los temas siguientes: Agregar un mapa a una aplicacin Agregar un mapa a una aplicacin Agregar campos sobre un mapa Crear una imagen esttica de un mapa Mostrar superposiciones KML en un mapa Descripcin general de la geoubicacin Modos de geoubicacin Descripcin general de los servicios basados en ubicacin Consultar las fuentes de ubicacin Solicitar actualizaciones simultneas de geoubicacin y GPS Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin Recuperar la duracin y distancia estimadas del viaje Recuperar varias posiciones ptimas Recuperar la posicin ptima Recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin Recuperar la duracin y distancia estimadas del viaje Recuperar la posicin ptima con GPS y geoubicacin Especificar ubicaciones en un mapa Etiquetar y configurar la visibilidad de las ubicaciones en un mapa Etiquetar y configurar la visibilidad de las ubicaciones en un mapa Activar y poner en cola los Servicios de ubicacin en el dispositivo

Se agregaron los siguientes ejemplos de cdigo: Ejemplo de cdigo: agregar un mapa a una aplicacin Ejemplo de cdigo: recuperar la ubicacin de un dispositivo mediante el servicio de geoubicacin
107

Gua de desarrollo

Historial de revisin del documento

Fecha

Descripcin Ejemplo de cdigo: recuperar la duracin y distancia estimadas del viaje Ejemplo de cdigo: recuperar la posicin ptima Ejemplo de cdigo: recuperar varias posiciones ptimas Ejemplo de cdigo: etiquetar y configurar la visibilidad de las ubicaciones en un mapa

Se cambiaron los temas siguientes: Recuperar una direccin utilizando la codificacin geogrfica inversa Abrir BlackBerry Maps desde BlackBerry Browser.

108

Gua de desarrollo

Aviso legal

Aviso legal

12

2010 Research In Motion Limited. Reservados todos los derechos. BlackBerry, RIM, Research In Motion y las marcas comerciales, nombres y logotipos relacionados son propiedad de Research In Motion Limited y estn registrados y/o se usan en EE. UU. y en diferentes pases del mundo. Bluetooth es una marca comercial de Bluetooth SIG. Java, Java ME, Java SE y JavaScript son marcas comerciales de Oracle America, Inc. OpenGIS es una marca comercial de Open Geospatial Consortium, Inc. Wi-Fi es una marca comercial de Wi-Fi Alliance. Todas las dems marcas comerciales son propiedad de sus respectivos propietarios. Esta documentacin, incluida cualquier documentacin que se incorpore mediante referencia como documento proporcionado o disponible en www.blackberry.com/go/docs, se proporciona o se pone a disposicin "TAL CUAL" y "SEGN SU DISPONIBILIDAD" sin ninguna condicin, responsabilidad o garanta de ningn tipo por Research In Motion Limited y sus empresas afiliadas ("RIM") y RIM no asume ninguna responsabilidad por los errores tipogrficos, tcnicos o cualquier otra imprecisin, error u omisin contenidos en esta documentacin. Con el fin de proteger la informacin confidencial y propia de RIM, as como los secretos comerciales, la presente documentacin describe algunos aspectos de la tecnologa de RIM en lneas generales. RIM se reserva el derecho a modificar peridicamente la informacin que contiene esta documentacin, si bien tampoco se compromete en modo alguno a proporcionar cambios, actualizaciones, ampliaciones o cualquier otro tipo de informacin que se pueda agregar a esta documentacin. Esta documentacin puede contener referencias a fuentes de informacin, hardware o software, productos o servicios, incluidos componentes y contenido como, por ejemplo, el contenido protegido por copyright y/o sitios Web de terceros (conjuntamente, los "Productos y servicios de terceros"). RIM no controla ni es responsable de ningn tipo de Productos y servicios de terceros, incluido, sin restricciones, el contenido, la exactitud, el cumplimiento de copyright, la compatibilidad, el rendimiento, la honradez, la legalidad, la decencia, los vnculos o cualquier otro aspecto de los Productos y servicios de terceros. La inclusin de una referencia a los Productos y servicios de terceros en esta documentacin no implica que RIM se haga responsable de dichos Productos y servicios de terceros o de dichos terceros en modo alguno. EXCEPTO EN LA MEDIDA EN QUE LO PROHBA ESPECFICAMENTE LA LEY DE SU JURISDICCIN, QUEDAN EXCLUIDAS POR LA PRESENTE TODAS LAS CONDICIONES, APROBACIONES O GARANTAS DE CUALQUIER TIPO, EXPLCITAS O IMPLCITAS, INCLUIDA, SIN NINGN TIPO DE LIMITACIN, CUALQUIER CONDICIN, APROBACIN, GARANTA, DECLARACIN DE GARANTA DE DURABILIDAD, IDONEIDAD PARA UN FIN O USO DETERMINADO, COMERCIABILIDAD, CALIDAD COMERCIAL, ESTADO DE NO INFRACCIN, CALIDAD SATISFACTORIA O TITULARIDAD, O QUE SE DERIVE DE UNA LEY O COSTUMBRE O UN CURSO DE LAS NEGOCIACIONES O USO DEL COMERCIO, O RELACIONADO CON LA DOCUMENTACIN O SU USO O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER SOFTWARE, HARDWARE, SERVICIO O CUALQUIER PRODUCTO O SERVICIO DE TERCEROS MENCIONADOS AQU. TAMBIN PODRA TENER OTROS DERECHOS QUE VARAN SEGN EL ESTADO O PROVINCIA. ES POSIBLE QUE ALGUNAS JURISDICCIONES NO PERMITAN LA EXCLUSIN O LA LIMITACIN DE GARANTAS IMPLCITAS Y CONDICIONES. EN LA MEDIDA EN QUE LO PERMITA LA LEY, CUALQUIER GARANTA IMPLCITA O CONDICIONES EN RELACIN CON LA DOCUMENTACIN NO SE PUEDEN EXCLUIR TAL Y COMO SE HA EXPUESTO ANTERIORMENTE, PERO PUEDEN SER LIMITADAS, Y POR LA PRESENTE ESTN LIMITADAS A NOVENTA (90) DAS DESDE DE LA FECHA QUE ADQUIRI LA DOCUMENTACIN O EL ELEMENTO QUE ES SUJETO DE LA RECLAMACIN.

109

Gua de desarrollo

Aviso legal

EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, EN NINGN CASO RIM ASUMIR RESPONSABILIDAD ALGUNA POR CUALQUIER TIPO DE DAOS RELACIONADOS CON ESTA DOCUMENTACIN O SU USO, O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER SOFTWARE, HARDWARE, SERVICIO O PRODUCTOS Y SERVICIOS DE TERCEROS AQU MENCIONADOS INCLUIDOS SIN NINGN TIPO DE LIMITACIN CUALQUIERA DE LOS SIGUIENTES DAOS: DIRECTOS, RESULTANTES, EJEMPLARES, INCIDENTALES, INDIRECTOS, ESPECIALES, PUNITIVOS O AGRAVADOS, DAOS POR PRDIDA DE BENEFICIOS O INGRESOS, IMPOSIBILIDAD DE CONSEGUIR LOS AHORROS ESPERADOS, INTERRUPCIN DE LA ACTIVIDAD COMERCIAL, PRDIDA DE INFORMACIN COMERCIAL, PRDIDA DE LA OPORTUNIDAD DE NEGOCIO O CORRUPCIN O PRDIDA DE DATOS, IMPOSIBILIDAD DE TRANSMITIR O RECIBIR CUALQUIER DATO, PROBLEMAS ASOCIADOS CON CUALQUIER APLICACIN QUE SE UTILICE JUNTO CON PRODUCTOS Y SERVICIOS DE RIM, COSTES DEBIDOS AL TIEMPO DE INACTIVIDAD, PRDIDA DE USO DE LOS PRODUCTOS Y SERVICIOS DE RIM O PARTE DE L O DE CUALQUIER SERVICIO DE USO, COSTE DE SERVICIOS SUSTITUTIVOS, COSTES DE COBERTURA, INSTALACIONES O SERVICIOS, COSTE DEL CAPITAL O CUALQUIER OTRA PRDIDA MONETARIA SIMILAR, TANTO SI DICHOS DAOS SE HAN PREVISTO O NO, Y AUNQUE SE HAYA AVISADO A RIM DE LA POSIBILIDAD DE DICHOS DAOS. EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, RIM NO TENDR NINGN OTRO TIPO DE OBLIGACIN O RESPONSABILIDAD CONTRACTUAL, EXTRACONTRACTUAL O CUALQUIER OTRA, INCLUIDA CUALQUIER RESPONSABILIDAD POR NEGLIGENCIA O RESPONSABILIDAD ESTRICTA. LAS LIMITACIONES, EXCLUSIONES Y DESCARGOS DE RESPONSABILIDAD SE APLICARN: (A) INDEPENDIENTEMENTE DE LA NATURALEZA DE LA CAUSA DE LA ACCIN, DEMANDA O ACCIN SUYA, INCLUIDA PERO NO LIMITADA AL INCUMPLIMIENTO DEL CONTRATO, NEGLIGENCIA, AGRAVIO, EXTRACONTRACTUAL, RESPONSABILIDAD ESTRICTA O CUALQUIER OTRA TEORA DEL DERECHO Y DEBERN SOBREVIVIR A UNO O MS INCUMPLIMIENTOS ESENCIALES O AL INCUMPLIMIENTO DEL PROPSITO ESENCIAL DE ESTE CONTRATO O CUALQUIER SOLUCIN CONTENIDA AQU; Y (B) A RIM Y A SUS EMPRESAS AFILIADAS, SUS SUCESORES, CESIONARIOS, AGENTES, PROVEEDORES (INCLUIDOS LOS PROVEEDORES DE SERVICIOS DE USO), DISTRIBUIDORES AUTORIZADOS POR RIM (INCLUIDOS TAMBIN LOS PROVEEDORES DE SERVICIOS DE USO) Y SUS RESPECTIVOS DIRECTORES, EMPLEADOS Y CONTRATISTAS INDEPENDIENTES. ADEMS DE LAS LIMITACIONES Y EXCLUSIONES MENCIONADAS ANTERIORMENTE, EN NINGN CASO NINGN DIRECTOR, EMPLEADO, AGENTE, DISTRIBUIDOR, PROVEEDOR, CONTRATISTA INDEPENDIENTE DE RIM O CUALQUIER AFILIADO DE RIM ASUMIR NINGUNA RESPONSABILIDAD DERIVADA DE O RELACIONADA CON LA DOCUMENTACIN. Antes de instalar, usar o suscribirse a cualquiera de los Productos y servicios de terceros, es su responsabilidad asegurarse de que su proveedor de servicios de uso ofrezca compatibilidad con todas sus funciones. Puede que algunos proveedores de servicios de uso no ofrezcan las funciones de exploracin de Internet con una suscripcin al servicio BlackBerry Internet Service. Consulte con su proveedor de servicios acerca de la disponibilidad, arreglos de itinerancia, planes de servicio y funciones. La instalacin o el uso de los Productos y servicios de terceros con productos y servicios de RIM puede precisar la obtencin de una o ms patentes, marcas comerciales, derechos de autor u otras licencias para evitar que se vulneren o violen derechos de terceros. Usted es el nico responsable de determinar si desea utilizar Productos y servicios de terceros y si se necesita para ello cualquier otra licencia de terceros. En caso de necesitarlas, usted es el nico responsable de su adquisicin. No instale o utilice Productos y servicios de terceros hasta que se hayan adquirido todas las licencias necesarias. Cualquier tipo de Productos y servicios de terceros que se proporcione con los productos y servicios de RIM se le facilita para su comodidad "TAL CUAL" sin ninguna condicin expresa e implcita, aprobacin, garanta de cualquier tipo por RIM y RIM no sume
110

Gua de desarrollo

Aviso legal

ninguna responsabilidad en relacin con ello. El uso de los Productos y servicios de terceros se regir y estar sujeto a la aceptacin de los trminos de licencias independientes aplicables en este caso con terceros, excepto en los casos cubiertos expresamente por una licencia u otro acuerdo con RIM. Algunas funciones mencionadas en esta documentacin requieren una versin mnima del software de BlackBerry Enterprise Server, BlackBerry Desktop Software y/o BlackBerry Device Software. Los trminos de uso de cualquier producto o servicio de RIM se presentan en una licencia independiente o en otro acuerdo con RIM que se aplica en este caso. NINGUNA PARTE DE LA PRESENTE DOCUMENTACIN EST PENSADA PARA PREVALECER SOBRE CUALQUIER ACUERDO EXPRESO POR ESCRITO O GARANTA PROPORCIONADA POR RIM PARA PARTES DE CUALQUIER PRODUCTO O SERVICIO DE RIM QUE NO SEA ESTA DOCUMENTACIN. Research In Motion Limited 295 Phillip Street Waterloo, ON N2L 3W8 Canad Research In Motion UK Limited Centrum House 36 Station Road Egham, Surrey TW20 9LF Reino Unido Publicado en Canad

111

You might also like