Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la...

148
cenidet Centro Nacional de Investigación y Desarrollo Tecnológico Departamento de Ciencias Computacionales TESIS DE MAESTRÍA EN CIENCIAS API para la Gestión de Mapas de Navegación en Dispositivos Móviles Mediante el Sistema GPS y Mensajería SMS/MMS presentada por Claudia Victoria Rincón Ing. en Sistemas Computacionales por el Instituto Tecnológico de Tehuacán como requisito para la obtención del grado de: Maestría en Ciencias en Ciencias Computacionales Director de tesis: Dr. Juan Gabriel González Serna Co-Director de tesis: Dr. Joaquín Pérez Ortega Jurado: Dr. René Santaolaya Salgado Presidente M.C. Hugo Estrada Esquivel Secretario Dr. Juan Gabriel González Serna Vocal Dr. Rodolfo Abraham Pazos Rangel - Vocal Suplente Cuernavaca, Morelos, México. 7 de noviembre de 2008

Transcript of Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la...

Page 1: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

cenidet

Centro Nacional de Investigación y Desarrollo Tecnológico

Departamento de Ciencias Computacionales

TESIS DE MAESTRÍA EN CIENCIAS

API para la Gestión de Mapas de Navegación en Dispositivos Móviles Mediante el Sistema GPS y Mensajería SMS/MMS

presentada por

Claudia Victoria Rincón Ing. en Sistemas Computacionales por el Instituto Tecnológico de Tehuacán

como requisito para la obtención del grado de:

Maestría en Ciencias en Ciencias Computacionales

Director de tesis: Dr. Juan Gabriel González Serna

Co-Director de tesis:

Dr. Joaquín Pérez Ortega

Jurado: Dr. René Santaolaya Salgado – Presidente M.C. Hugo Estrada Esquivel – Secretario Dr. Juan Gabriel González Serna – Vocal

Dr. Rodolfo Abraham Pazos Rangel - Vocal Suplente

Cuernavaca, Morelos, México. 7 de noviembre de 2008

Page 2: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

DEDICATORIA

Al ser divino que está conmigo siempre para protegerme y ayudarme, especialmente en los

momentos más difíciles de mi vida…

A mis padres:

Juana Rincón Rojas y José Luis Victoria Rodríguez, por todo lo que representan en mi

vida. Gracias Padre por tú cariño, por tus lecciones, por tus consejos… Gracias Madre por tu

apoyo y comprensión, por hacerme quien soy, por creer en mí y dejarme abrir las alas para

emprender el vuelo, por todos tus sacrificios y tu inmenso amor. Ambos son mi fuerza e

inspiración para luchar cada día.

A mis hermanos:

Fabian Enrique, Rocio y Tere, este pequeño gran paso va dedicado a ustedes con todo mi

cariño, porque su apoyo y presencia nunca me ha faltado a pesar de la distancia.

Page 3: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

AGRADECIMIENTOS

Al Consejo Nacional de Ciencia y Tecnología (CONACYT) por la beca otorgada para la realización de esta maestría. Al Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET) por abrirme sus puertas para realizar mis estudios de posgrado. A mi director de tesis, Dr. Juan Gabriel González Serna, por sus enseñanzas y conocimientos, por sus buenos consejos, por su apoyo y comprensión en todo momento, por haberme permitido trabajar con él y hacer de estos dos años toda una experiencia religiosa. A mis revisores de tesis: Dr. René Santaolaya Salgado, Dr. Hugo Estrada Esquivel y Dr. Rodolfo A. Pazos Rangel. Por su atención y tiempo, por sus observaciones, recomendaciones y aportaciones que me permitieron mejorar este trabajo. A mi prima Ana Patricia Victoria Flores, por creer en mí y apoyarme siempre, por ser parte importante de mis pequeños triunfos. Gracias Paty por todo lo que me has brindado sin pedirme nada a cambio. A mis tíos que en todo momento se preocupan por saber cómo estoy, por sus consejos y palabras de aliento. Especialmente a mis tías Ale y Ana María y mis tíos Albino y Quique, por dar ese respaldo familiar que siempre necesitamos. A Paco, por ser una persona muy especial que ha estado conmigo en situaciones verdaderamente difíciles, por ayudarme a seguir adelante dando más de lo que se puede dar. A mis amigos y compañeros de generación: Janetcita, Deysy, Lalo, Mitto, Richard. Por haber estado en buenos y malos momentos, por su ayuda y consuelo cuando lo necesité, por hacer el tiempo menos largo y más divertido. A unos amigos muy especiales que encontré en mi camino y que recordaré con mucho

cariño: Cindy, Adriana, Rafa, Shavo. Porque juntos la pasamos super, por dejarme

conocerlos y aprender de ustedes, por todo lo que compartimos… por su amistad, compañía,

alegría y comprensión.

Page 4: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

RESUMEN

Los servicios basados en localización así como los sistemas de navegación en mapas, son aplicaciones cada vez más utilizadas y populares entre los usuarios y actualmente se encuentran disponibles en una gran diversidad de dispositivos móviles. Proporcionan métodos para la búsqueda de información y servicios basados en la ubicación del usuario móvil.

En este trabajo de investigación se presenta una API desarrollada en J2ME para crear aplicaciones para dispositivos móviles. La API proporciona servicios para procesamiento de consultas georeferenciadas/no georeferenciadas y envío y recepción de información (utilizando como medio de transporte el servicio de mensajería SMS/MMS así como el protocolo HTTP y el sistema de posicionamiento global GPS). Además, ofrece soporte a imágenes con el perfil móvil SVG Tiny para representar los mapas de navegación, implementa servicios para agregar puntos de interés, agregar un camino y visualizar e interactuar con un mapa SVG por medio de un menú de opciones y teclas del dispositivo móvil.

La API está dirigida a teléfonos celulares de última generación, smartphones y Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología actual de estos dispositivos para proporcionar a los usuarios servicios de localización en el lugar y momento requeridos, ya sea de manera textual o gráfica, que les permita resolver necesidades de ubicación.

Page 5: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ABSTRACT

Location Based Services as well as map navigation systems are applications increasingly used and popular among users, and nowadays they are available in a wide diversity of mobile devices. They provide search methods for information and services based on mobile user location.

In this research work an API to create applications for mobile devices is presented. The API is developed in J2ME. It provides services for geolocalizable/no geolocalizable queries processing and services to send and receive information (using the SMS/MMS messaging service as well as HTTP protocol and the global positioning system GPS). Moreover, it offers support to images with the mobile profile

SVG Tiny to represent the navigation maps, implements services to add points of

interest, add paths, visualize and interact with a SVG map by means of a menu options and keys of the mobile device.

The API is targeted to high-end cellular phones, Smartphones and Pocket PCs that support the CLDC 1.1 configuration and the MIDP 2.0 mobile profile for Java. The idea is to take advantage of the current technology in those devices to provide location services to users in a specific place and moment, in a textual or graphical way, to solve their location needs.

Page 6: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

i

CONTENIDO

CAPÍTULO 1 INTRODUCCIÓN ...................................................................................................... 1

1.1 Introducción ..................................................................................................................................... 2

1.2 Descripción del problema................................................................................................................. 2

1.3 Objetivo ........................................................................................................................................... 3

1.4 Justificación y beneficios .................................................................................................................. 3

1.5 Antecedentes ................................................................................................................................... 5

1.6 Trabajos relacionados ...................................................................................................................... 6

1.6.1 WALLIP: Una plataforma de servicios con percepción contextual basada en localización ........ 6 1.6.2 d-Ruta, un sistema móvil de información turística .................................................................... 6 1.6.3 Indoor and outdoor location based services for portable wireless devices .............................. 7 1.6.4 MAP Suite Pocket PC.................................................................................................................. 7 1.6.5 OziExplorerCE............................................................................................................................. 7 1.6.6 Natural Language Query Interface in SMS/MMS-based Spatial Information Service ............... 7 1.6.7 Map24 Mobile Kit ...................................................................................................................... 8 1.6.8 Representation of classic maps for mobile devices. An interactive mobile map application .... 8 1.6.9 Análisis comparativo .................................................................................................................. 8

1.7 Alcances y limitaciones .................................................................................................................. 10

1.7.1 Alcances ................................................................................................................................... 10 1.7.2 Limitaciones ............................................................................................................................. 11

1.8 Organización del documento ......................................................................................................... 11

CAPÍTULO 2 MARCO TEÓRICO ................................................................................................ 12

2.1 API ................................................................................................................................................. 13

2.2 Dispositivos móviles ....................................................................................................................... 13

2.2.1 Teléfono Celular ....................................................................................................................... 13 2.2.2 Pocket PC/PDA ......................................................................................................................... 13 2.2.3 Smartphone (Teléfono inteligente) ......................................................................................... 14

2.3 Imagen vectorial ............................................................................................................................ 14

2.4 Imagen raster ................................................................................................................................. 15

2.5 J2ME .............................................................................................................................................. 15

2.6 Mensajería SMS ............................................................................................................................. 16

Page 7: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ii

2.7 Mensajería MMS ............................................................................................................................ 17

2.8 Sistema GPS ................................................................................................................................... 17

2.9 SVG (Scalable Vector Graphics) ...................................................................................................... 18

CAPÍTULO 3 ANÁLISIS Y DISEÑO ............................................................................................ 20

3.1 Especificación de requerimientos ................................................................................................... 21

3.1.1 Ámbito ..................................................................................................................................... 21 3.1.2 Descripción General de la API SMS/MMS ............................................................................... 21 3.1.2.1 Perspectiva del producto ......................................................................................................... 21 3.1.2.2 Funciones de la API .................................................................................................................. 22 3.1.2.3 Descripción de las funciones .................................................................................................... 22 3.1.2.3.1 Formar trama para solicitar un mapa ...................................................................................... 22 3.1.2.3.2 Recibir respuestas en un mensaje MMS .................................................................................. 23 3.1.2.3.3 Procesar imágenes SVG ........................................................................................................... 23 3.1.2.3.4 Representar puntos de interés sobre un mapa ....................................................................... 23 3.1.2.3.5 Trazar camino .......................................................................................................................... 24 3.1.2.3.6 Obtener datos de localización del dispositivo móvil................................................................ 24 3.1.2.3.7 Implementar conexiones HTTP ................................................................................................ 24 3.1.2.3.8 Visualizar e interactuar con el mapa a través del dispositivo móvil ........................................ 24 3.1.2.4 Usuarios de la API SMS/MMS .................................................................................................. 25

3.2 Análisis ........................................................................................................................................... 25

3.2.1 Arquitectura de la API SMS/MMS ............................................................................................ 25 3.2.2 Limitaciones de los dispositivos móviles.................................................................................. 26 3.2.3 Casos de uso de la API SMS/MMS ........................................................................................... 29 3.2.3.1 Caso de uso general ................................................................................................................. 29 3.2.3.2 Caso de uso: Solicitar mapa ..................................................................................................... 29 3.2.3.3 Caso de uso: Recibir mensaje MMS ......................................................................................... 31 3.2.3.4 Caso de uso: Procesar imágenes SVG ...................................................................................... 32 3.2.3.5 Caso de uso: Representar puntos de interés ........................................................................... 33 3.2.3.6 Caso de uso: Trazar camino ..................................................................................................... 35 3.2.3.7 Caso de uso: Obtener datos de localización ............................................................................ 36 3.2.3.8 Caso de uso: Conexión HTTP .................................................................................................... 37 3.2.3.9 Caso de uso: Visualizar e interactuar con el mapa .................................................................. 39

3.3 Diseño ............................................................................................................................................ 43

3.3.1 Paquetes diseñados ................................................................................................................. 45 3.3.1.1 Paquete mx.edu.cenidet.apismsmms.conexionhttp ............................................................... 46 3.3.1.2 Paquete mx.edu.cenidet.apismsmms.conexionmms .............................................................. 48 3.3.1.3 Paquete mx.edu.cenidet.apismsmms.localizacionmovil ......................................................... 50 3.3.1.4 Paquete mx.edu.cenidet.apismsmms.mapasvg ...................................................................... 51

CAPÍTULO 4 IMPLEMENTACIÓN ............................................................................................. 53

4.1 Solicitar mapa ................................................................................................................................ 54

4.2 Recibir mensaje MMS .................................................................................................................... 55

Page 8: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

iii

4.3 Procesar imágenes SVG .................................................................................................................. 57

4.4 Representar puntos de interés ....................................................................................................... 57

4.5 Trazar camino ................................................................................................................................ 59

4.6 Obtener datos de localización ........................................................................................................ 60

4.7 Conexión HTTP ............................................................................................................................... 61

4.8 Visualizar e interactuar con el mapa SVG ....................................................................................... 62

CAPÍTULO 5 PRUEBAS ................................................................................................................ 64

CAPÍTULO 6 CONCLUSIONES Y TRABAJOS FUTUROS ...................................................... 76

6.1 Conclusiones .................................................................................................................................. 77

6.2 Trabajo futuros .............................................................................................................................. 79

ANEXO A DOCUMENTACIÓN DE LA API .................................................................................. 82 ANEXO B APLICACIONES DE PRUEBA ................................................................................... 103 ANEXO C PLAN DE PRUEBAS .................................................................................................... 116 ANEXO D ESTRUCTURA DE UN MENSAJE MMS .................................................................. 127 ANEXO E DISPOSITIVOS MÓVILES QUE SOPORTAN JSR 226 ......................................... 133

Page 9: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

iv

ÍNDICE DE FIGURAS

Figura 1.1 Usuarios de telefonía móvil en miles (1990-2008). ........................................................................... 4 Figura 2.1 En el modelo de datos vectorial los objetos se describen como puntos, líneas o áreas (polígonos).

Estos elementos existen como elementos geométricos no como objetos físicos. .................................. 14 Figura 2.2 Los datos de un mapa raster se visualizan como una rejilla sobrepuesta sobre un terreno. Cada

celda almacena un código que describe el terreno de una celda en particular. ...................................... 15 Figura 2.3 Estructura de un mensaje SMS. ...................................................................................................... 16 Figura 2.4 Esquema de composición de páginas en un mensaje MMS. ........................................................... 17 Figura 2.5 Perfiles SVG. ................................................................................................................................... 19 Figura 2.6 Código fuente de una imagen SVG Tiny. ......................................................................................... 19 Figura 3.1 Trama del mensaje SMS. ................................................................................................................ 22 Figura 3.2 Arquitectura de la API SMS/MMS en un contexto cliente/servidor. ............................................... 26 Figura 3.3 Diversidad de tamaños de pantallas en dispositivos móviles. ......................................................... 27 Figura 3.4 Diagrama de caso de uso general de la API SMS/MMS. .................................................................. 29 Figura 3.5 Diagrama de caso de uso: CU-1 Solicitar mapa. .............................................................................. 30 Figura 3.6 Diagrama de actividad del caso de uso: CU-1 Solicitar mapa. ......................................................... 30 Figura 3.7 Diagrama de caso de uso: CU-2 Recibir mensaje MMS. .................................................................. 31 Figura 3.8 Diagrama de actividad del caso de uso: CU-2 Recibir mensaje MMS. ............................................. 32 Figura 3.9 Diagrama de caso de uso: CU-3 Procesar imágenes SVG. ................................................................ 32 Figura 3.10 Diagrama de actividad del caso de uso: CU-3 Procesar imágenes SVG. ......................................... 33 Figura 3.11 Diagrama de caso de uso: CU-4 Representar puntos de interés. ................................................... 33 Figura 3.12 Diagrama de actividad del caso de uso: CU-4 Representar puntos de interés. .............................. 34 Figura 3.13 Diagrama de caso de uso: CU-5 Trazar camino.............................................................................. 35 Figura 3.14 Diagrama de actividad del caso de uso: CU-5 Trazar camino. ........................................................ 36 Figura 3.15 Diagrama de caso de uso: CU-6 Obtener datos de localización. .................................................... 36 Figura 3.17 Diagrama de caso de uso: CU-7 Conexión HTTP. ........................................................................... 37 Figura 3.16 Diagrama de actividad del caso de uso: CU-6 Obtener datos de localización. ............................... 37 Figura 3.18 Diagrama de actividad del caso de uso: CU-7 Conexión HTTP. ...................................................... 39 Figura 3.19 Diagrama de caso de uso: CU-8 Visualizar e interactuar con el mapa............................................ 39 Figura 3.20 Diagrama de actividad del caso de uso: CU-8 Visualizar e interactuar con el mapa....................... 40 Figura 3.21 Diagrama de actividad del caso de uso: CU-8.1 Zoom-in. .............................................................. 41 Figura 3.22 Diagrama de actividad del caso de uso: CU-8.2 Zoom-out. ........................................................... 42 Figura 3.23 Diagrama de actividad del caso de uso: CU-8.3 Paneo. ................................................................. 42 Figura 3.24 Diagrama de actividad del caso de uso: CU-8.1 Vista panorámica. ............................................... 43 Figura 3.25 Diagrama general de paquetes diseñados para la API SMS/MMS. ................................................ 44 Figura 3.26 Diagrama de la clase Poi.java. ...................................................................................................... 44 Figura 3.27 Diagrama de clases general de los paquetes diseñados para la API SMS/MMS. ........................... 46 Figura 3.28 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.conexionhttp. ............................... 47 Figura 3.29 Diagrama de secuencia para una conexión HTTP. ......................................................................... 48 Figura 3.30 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.conexionmms. .............................. 48 Figura 3.31 Diagrama de secuencia para recibir un mensaje en una aplicación. .............................................. 49 Figura 3.32 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.localizacionmovil. ......................... 50 Figura 3.33 Diagrama de secuencia para obtener datos de localización. ......................................................... 51 Figura 3.34 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.mapasvg. ...................................... 51 Figura 3.35 Diagrama de secuencia para mostrar e interactuar con un mapa SVG en el dispositivo móvil. ..... 52 Figura 4.1 Datos para la trama de consulta georeferenciada de sitios de interés. ........................................... 54 Figura 4.2 Implementación de los métodos para recibir y procesar un mensaje. ............................................ 56 Figura 4.3 Implementación de los métodos para recibir y procesar un mensaje. ............................................ 57

Page 10: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

v

Figura 4.4 Implementación de la clase AgregarElementosSVG para dibujar puntos de interés en un mapa SVG. .............................................................................................................................................................. 58

Figura 4.5 Implementación de la clase AgregarElementosSVG para representar un camino sobre un mapa SVG. .............................................................................................................................................................. 59

Figura 4.6 Implementación de la clase Localizacion para obtener la posición de un usuario a través de su dispositivo móvil.................................................................................................................................... 60

Figura 4.7 Implementación de las clases PropiedadesGETMap y ConexionHTTP para solicitar un mapa por medio del protocolo Http desde un dispositivo móvil. ........................................................................... 62

Figura 4.8 Implementación de los métodos de la clase ImagenSVG para interactuar con el mapa. ................. 63 Figura 5.1 Trama de consulta Q_GEO_UBICACION para solicitar un mapa. ..................................................... 66 Figura 5.2 Trama de consulta Q_CAMINO_GEO_GEO para solicitar un mapa. ................................................. 66 Figura 5.3 Trama de consulta Q_CAMINO_GEO_NOGEO para solicitar un mapa. ............................................ 67 Figura 5.4 Trama de consulta Q_GEO_EVENTO para solicitar un mapa. .......................................................... 67 Figura 5.5 Trama de consulta Q_NOGEO_UBICACION para solicitar un mapa. ................................................ 68 Figura 5.6 Trama de consulta Q_CAMINO_NOGEO_GEO para solicitar un mapa. ............................................ 68 Figura 5.7 Trama de consulta Q_CAMINO_NOGEO_NOGEO para solicitar un mapa. ....................................... 69 Figura 5.8 Trama de consulta Q_NOGEO_EVENTO para solicitar un mapa. ..................................................... 69 Figura 5.9 Envío del mensaje MMS desde la consola WMA de NetBeans. ...................................................... 70 Figura 5.10 MIDlet que recibe un MMS y muestra el contenido SVG del mensaje. ......................................... 70 Figura 5.11 Ejemplo de carga y visualización de imágenes SVG. ...................................................................... 71 Figura 5.12 Representación de puntos de interés en un mapa. ....................................................................... 72 Figura 5.13 Representación de un camino sobre un mapa. ............................................................................. 72 Figura 5.14 Localización georeferenciada del usuario móvil. ........................................................................... 73 Figura 5.15 Conexión HTTP para realizar una petición GET y obtener un mapa. .............................................. 73 Figura 5.16 Imagen de un mapa SVG con distintos niveles de acercamiento. .................................................. 74 Figura 5.17 Imagen de un mapa SVG con distintos niveles de alejamiento. .................................................... 74 Figura 5.18 Imagen de un mapa SVG desplazada en distintas direcciones de la pantalla. ............................... 75 Figura D.1 Modelo de encapsulación de datos MMS. .....................................................................................128 Figura D.2 Interfaces y subinterfaces de un mensaje WMA. ..........................................................................129

Page 11: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

vi

ÍNDICE DE TABLAS

Tabla 1.1 Resumen comparativo del estado del arte....................................................................................... 10 Tabla 3.1 Especificación técnica de algunos dispositivos móviles. .................................................................. 27 Tabla 3.2 Descripción del caso de uso: CU-1 Solicitar mapa. ........................................................................... 30 Tabla 3.3 Descripción del caso de uso: CU-2 Recibir mensaje MMS. ............................................................... 31 Tabla 3.4 Descripción del caso de uso: CU-3 Procesar imágenes SVG. ............................................................. 32 Tabla 3.5 Descripción del caso de uso: CU-4 Representar puntos de interés. .................................................. 33 Tabla 3.6 Descripción del caso de uso: CU-5 Trazar camino............................................................................. 35 Tabla 3.7 Descripción del caso de uso: CU-6 Obtener datos de localización. ................................................... 36 Tabla 3.8 Descripción del caso de uso: CU-7 Conexión HTTP. .......................................................................... 38 Tabla 3.9 Descripción del caso de uso: CU-8 Visualizar e interactuar con el mapa. ......................................... 39 Tabla 3.10 Descripción del caso de uso: CU-8.1 Zoom-in. ................................................................................ 40 Tabla 3.11 Descripción del caso de uso: CU-8.2 Zoom-out. ............................................................................. 41 Tabla 3.12 Descripción del caso de uso: CU-8.3 Paneo. ................................................................................... 42 Tabla 3.13 Descripción del caso de uso: CU-8.4 Vista original. ........................................................................ 43 Tabla 4.1 Parámetros para solicitar un mapa por medio de la petición GetMap. ............................................ 62 Tabla C.1 Identificadores de las funciones a probar. ......................................................................................118 Tabla C.2 Descripción de las tareas de prueba a realizar. ...............................................................................119 Tabla C.3 Requisitos ambientales para el plan de pruebas APISMSMMS. ......................................................120 Tabla D.1 Campos de cabecera de un PDU M-Send-req. ................................................................................130 Tabla D.2 Campos de cabecera del PDU M-Send.conf. ...................................................................................131 Tabla E.1 Dispositivos que soportan la API JSR 226. .......................................................................................134

Page 12: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

vii

GLOSARIO

1xRTT 1x se refiere al número de canales de 1.25MHz, RTT Radio Transmission Technology. Es un servicio de conexión inalámbrica a Internet de velocidad acelerada.

3G Es una denominación para tercera-generación de telefonía móvil. Los servicios asociados con la tercera generación proporcionan la posibilidad de transferir tanto voz y datos (una llamada telefónica) y datos no-voz (como la descarga de programas, intercambio de email y mensajería instantánea).

3GPP 3rd Generation Partnership Project. Es un acuerdo de colaboración que proporciona estándares de telecomunicaciones que se conocen como Organizational Partners.

CDMA Code Division Multiple Access. El acceso múltiple por división de código o CDMA es un término genérico para varios métodos de multiplexación o control de acceso al medio basados en la tecnología de espectro extendido (spread spectrum). Generalmente se emplea en comunicaciones inalámbricas (por radiofrecuencia), aunque también puede usarse en sistemas de fibra óptica o de cable.

GPRS General Packet Radio Service. Es un servicio de datos móvil orientado a paquetes. Está disponible para los usuarios del Sistema Global para Comunicaciones Móviles (GSM). Permite velocidades de transferencia de 56 a 114 kbps. El método de cobro típico para transferencias de datos usando GPRS es el pago por megabytes de transferencia, mientras que el pago de la comunicación tradicional mediante conmutación de circuitos se cobra por tiempo de conexión, independientemente de si el usuario está utilizando el canal o éste se encuentra inactivo.

GSM Global System for Mobile communications. Es un sistema estándar para comunicación utilizando teléfonos móviles que incorporan tecnología digital.

HTTP HyperText Transfer Protocol. Es un protocolo orientado a transacciones Web y sigue el esquema petición-respuesta entre un cliente y un servidor.

JCP Java Community Process. Es un proceso formalizado que permite a las partes interesadas involucrarse en la definición de futuras versiones y características de la plataforma Java.

JSR Java Specification Request. Son documentos formales que describen las especificaciones y tecnologías propuestas para que sean añadidas a la plataforma Java.

LBS Location Based Service. Ofrecen un servicio personalizado a los usuarios basado en su información de ubicación geográfica. Para su operación utiliza tecnología de sistemas de información geográfica, alguna tecnología de posicionamiento y tecnología de comunicación de redes para transmitir información hacia una aplicación LBS que pueda procesar y responder la solicitud.

MIME Multipurpose Internet Mail Extensions. Son una serie de convenciones o especificaciones dirigidas a hacer posible el intercambio a través de Internet todo tipo de archivos (texto, audio, vídeo, etc.) de forma transparente para el usuario. Una parte importante del MIME está dedicada a mejorar las posibilidades de transferencia de texto en distintos idiomas y alfabetos.

OMA Open Mobile Alliance. Es un organismo de normalización que desarrolla estándares abiertos para la industria de la telefonia móvil.

SMIL Synchronized Multimedia Integration Language. Es un estándar del W3C para presentaciones multimedia. El lenguaje SMIL permite integrar audio, video, imágenes, texto o cualquier otro contenido multimedia. Consiste de un conjunto de etiquetas XML que describen: fuentes de contenido, sincronización, temporización, posición, enlaces y animaciones.

SOAP Simple Object Access Protocol. Es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML.

Page 13: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

viii

SOAP fue creado por Microsoft, IBM y otros y está actualmente bajo el auspicio de la W3C. Es uno de los protocolos utilizados en los servicios Web.

UMTS Universal Mobile Telecommunications System. Es una tecnología usada por dispositivos móviles de tercera generación (3G), sucesor de GSM. Permite transmitir voz, audio y video en tiempo real y acceder a internet a una velocidad de hasta 2Mbps.

URL Uniform Resource Locator. Es una secuencia de caracteres, de acuerdo a un formato estándar, que se usa para nombrar recursos como documentos e imágenes en Internet para su localización.

W3C World Wide Web Consortium. Es un consorcio internacional donde las organizaciones miembro, personal de tiempo completo y el público en general, trabajan conjuntamente para desarrollar estándares Web. Su misión es: “Guiar la Web hacia su máximo potencial a través del desarrollo de protocolos y pautas que aseguren el crecimiento futuro de la Web”.

WAP Wireless Application Protocol. Es un estándar abierto internacional para aplicaciones que utilizan las comunicaciones inalámbricas, p.ej. acceso a servicios de Internet desde un teléfono móvil.

Wi-Fi Es un sistema de envío de datos sobre redes computacionales que utiliza ondas de radio en lugar de cables.

WMA Wireless Messaging API. Es un paquete opcional de plataforma independiente para J2ME que proporciona acceso a recursos de comunicación inalámbrica como SMS.

XML Extensible Markup Language. Es un metalenguaje extensible de etiquetas desarrollado por el W3C. Permite definir la gramática de lenguajes, por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades.

XSL Extensible Stylesheet Language. Es una familia de lenguajes basados en el estándar XML que permite describir cómo la información contenida en un documento XML cualquiera debe ser transformada o formateada para su presentación en un medio.

Page 14: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 1 INTRODUCCIÓN

La información que contiene este capítulo permitirá al lector tener una visión general del tema de investigación que se abordó y que originó este trabajo de tesis. Se presenta todo lo referente al problema resuelto y los trabajos relacionados. Al final del capítulo se encuentra la organización del documento.

Page 15: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

2

1.1 Introducción

Actualmente, los dispositivos móviles son una herramienta muy útil para las personas, ya que a través de éstos los usuarios se mantienen comunicados vía voz y además pueden solicitar gran diversidad de información por medio de mensajes SMS/MMS e Internet. Esto les permite resolver de manera rápida necesidades específicas en un momento determinado.

En el ámbito móvil, los servicios de localización han aumentado su popularidad debido a que los dispositivos móviles ya integran aplicaciones y tecnologías que permiten la ubicación de los usuarios a través de mapas así como la búsqueda de lugares a partir de su posición geográfica.

Por otro lado, J2ME es una plataforma de Java destinada a la programación en ambientes móviles. Se utiliza ampliamente por los programadores y desarrolladores para crear aplicaciones para dispositivos móviles de diversas características.

En este trabajo se presenta una API desarrollada en J2ME dirigida a aplicaciones LBS. Proporciona servicio a dispositivos móviles como celulares de última generación, Pocket PCs y smartphones. Su funcionamiento se basa en las siguientes tecnologías: mensajería SMS/MMS, sistema de posicionamiento global GPS, conexiones HTTP y gráficos vectoriales SVG. El objetivo de la API es, por medio de aplicaciones que la implementen, ofrecer a los usuarios móviles servicios para obtener su localización así como para localizar lugares y servicios en un entorno que generalmente desconoce. Los mensajes SMS/MMS y las conexiones HTTP se utilizan como medio de transporte para enviar y recibir información, GPS para obtener la posición del usuario (latitud, longitud, altitud) y los gráficos SVG para representar los mapas.

1.2 Descripción del problema

En el área de sistemas distribuidos de CENIDET se desarrolló una API para procesar consultas georeferenciadas/no georeferenciadas [Ruiz07]. Esta API ofrece servicios para realizar búsquedas de puntos de interés específicos a partir de la ubicación del usuario móvil. Sin embargo, las respuestas que proporciona son en texto plano. Esto significa que el resultado de una consulta se da en términos de una dirección (calle, número, colonia, código postal) en un mensaje SMS, lo cual soluciona parcialmente el requerimiento de un usuario que busca un lugar o un prestador de servicio específico en una ciudad que desconoce. Cuando un usuario recibe la respuesta de la búsqueda de algún lugar solicitado, debe orientarse desde su ubicación actual para localizar el servicio que más le convenga. Esto es difícil de identificar ya que puede tener más de un resultado y además no cuenta con una representación gráfica (como un mapa digital) de la información que recibió.

Por otro lado, aun cuando el avance tecnológico en los dispositivos móviles es cada vez mayor, existen limitantes como: tamaño de la pantalla, capacidad de procesamiento y

Page 16: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

3

almacenamiento. Además, existen diversos fabricantes y sistemas operativos que dificultan la interoperabilidad de las aplicaciones de un dispositivo móvil a otro. En resumen, el problema que se plantea en este trabajo de tesis es proporcionar servicios de localización que permitan obtener y procesar información de lugares y puntos de interés para presentarla de manera gráfica, es decir, a través de un mapa que se pueda visualizar en un dispositivo móvil. Solución propuesta:

Desarrollar una API para crear aplicaciones LBS que permita procesar mapas y mostrar puntos de interés sobre éste. Las tecnologías a utilizar son: mensajería SMS/MMS, solicitudes HTTP y GPS. Los servicios a desarrollar deben proporcionar mecanismos de interacción adecuados al dispositivo móvil para que el usuario visualice y manipule la información georeferencial mostrada en el mapa.

1.3 Objetivo

Desarrollar una API bajo la plataforma J2ME para procesar consultas georeferenciadas/no georeferenciadas a través de mensajes SMS/MMS y el protocolo HTTP para obtener un mapa o información que permita representar puntos de interés. El usuario deberá visualizar e interactuar con la información de referencia solicitada a través de un dispositivo móvil.

1.4 Justificación y beneficios

La telefonía celular en México mantiene un sostenido avance y de acuerdo con el ITEL (Índice de Producción del Sector Telecomunicaciones), es uno de los segmentos más dinámicos del sector de las telecomunicaciones. El tráfico cursado en este segmento ha comenzado a recuperar su dinamismo, impulsado por la reducción tarifaria, lo que ha incrementado el uso del servicio de mensajes cortos, y por los nuevos usuarios de la telefonía móvil que han incrementado el tráfico de salida tanto a las redes móviles como fijas [CFT07].

Durante el primer trimestre del año 2008, el sector de las telecomunicaciones registró un crecimiento sin precedentes de 36.4 por ciento, lo que confirma su fortaleza. La Comisión Federal de Telecomunicaciones (COFETEL) presentó el ITEL del primer trimestre de 2008, en el que se destaca que este incremento supera en casi 13 puntos porcentuales el comportamiento registrado en el mismo periodo de 2007. De acuerdo con el documento, el sector se vio beneficiado por el repunte en el tráfico de Telefonía Móvil que creció 60.5% con respecto al primer trimestre de 2007 (un aumento de más de 20 puntos porcentuales), lo que significa que este segmento es el más dinámico de la industria de las telecomunicaciones. Además, en ese mismo periodo las tarifas disminuyeron 16.5 % para la modalidad de postpago y 13% para el caso de prepago. Al cierre de marzo, se registraron 70.6 millones de usuarios, lo que representa un incremento de 18 por ciento con relación al mismo periodo de 2007 [CFT08]. En la figura 1.1 se observa un total de 72,848 millones de usuarios al finalizar el segundo trimestre de 2008.

Page 17: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

4

El uso de la mensajería MMS también ha ido en aumento debido a que este servicio hace posible el intercambio de texto y contenido multimedia en un sólo mensaje. Esta característica ha permitido que las empresas telefónicas ofrezcan nuevos servicios. La mensajería MMS surge como evolución de los mensajes SMS impulsada por dos hechos fundamentales [Telefonica07]:

1. La evolución tecnológica, que permite a los dispositivos aumentar considerablemente sus

prestaciones: disponen de pantallas más grandes (a color y con mayor definición), integran cámaras fotográficas y de vídeo, entre otros.

2. La aparición de redes de transmisión de datos de alta velocidad: las redes GPRS que disponen del sistema GSM, las redes 1xRTT en aquellos entornos que disponen de CDMA y las redes de tercera generación (3G), como UMTS.

Desde el punto de vista del negocio, el objetivo común de los operadores móviles es trasladar el éxito obtenido con el servicio de mensajes cortos SMS como generador de ingresos debido, entre otros factores, a su facilidad de uso y a la política tarifaria.

Por otro lado, la creciente cantidad de información que actualmente los usuarios pueden recuperar a través de un dispositivo móvil, como resultado de su evolución tecnológica, ha propiciado el desarrollo de herramientas y aplicaciones cada vez más complejas que se adapten al entorno limitado de dichos dispositivos para resolver diversas necesidades. La popularidad y uso de aplicaciones LBS entre los usuarios móviles ha aumentado debido a que proporcionan información basada en localización, haciendo posible la ubicación en tiempo real de lugares, personas, automóviles, entre otros, ya sea de manera textual o a través de un mapa digital. Ésta última, es de mayor utilidad debido a que muestra gráficamente la información solicitada por el usuario y es especialmente útil cuando se encuentra en un lugar desconocido. Las personas requieren información que sea oportuna y veraz para la toma de decisiones, en términos de ubicación y tecnología referenciada. Los sistemas de mapas de navegación

Figura 1.1 Usuarios de telefonía móvil en miles (1990-2008).

Fuente: Dirección General Adjunta de Tecnologías de la Información y Comunicaciones (Cofetel) con información de los concesionarios.

Page 18: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

5

permiten a un usuario determinar su posición en un mapa y ubicar servicios, utilizando para ello las capacidades y tecnología de su dispositivo móvil.

El principal beneficio de este trabajo de tesis es proporcionar una API dirigida hacia un amplio rango de dispositivos móviles para crear aplicaciones LBS que implementen mapas de navegación con el uso de tecnologías como mensajería SMS/MMS, conexiones HTTP y GPS.

1.5 Antecedentes

Los trabajos que se presentan como antecedentes de esta de tesis son los siguientes:

1. API SMS para el Procesamiento de Consultas Georeferenciadas/No georeferenciadas

[Ruiz07]. En este trabajo se desarrolló una API para crear e implementar aplicaciones en dispositivos móviles para buscar lugares y servicios a través de consultas SMS y el sistema de posicionamiento global.

La API se diseñó en el marco de los servicios basados en localización, los cuales responden a las preguntas ¿Qué hay cerca de..?, ¿Cómo llego a..?, ¿Qué pasa cerca de..? y ¿Qué clima hay en..? Con base en lo anterior, identifica cuatro tipos de objetos:

1. Punto de interés (georeferenciado o no georeferenciado). Para el primer caso, la

localización del usuario se realiza a través de información que obtiene de un GPS Bluetooth1; para el segundo caso, la localización se realiza a través de información que el usuario proporciona (calle, número, colonia, código postal, ciudad).

2. Camino. Sucesión de puntos que unen dos o más lugares. 3. Evento (político, religioso, cultural, etc.). 4. Clima.

2. Gateway2 SMS/MMS Pull para Servicios Basados en Localización con una Arquitectura de

Servicios Web [Quiñonez07]. En esta tesis se desarrolló una pasarela para procesar mensajes SMS/MMS que identifica si es una consulta georeferenciada o no georeferenciada del cliente móvil. Una vez que identifica el tipo de consulta, es posible procesarla de manera local o externa. Todo esto sobre una arquitectura que soporte tecnologías de los servicios Web.

Los tipos de búsqueda que soporta la arquitectura del gateway se definen mediante un conjunto de palabras clave, cada una de las cuales representan un servicio reconocido por el servidor de consultas, y en base a éstas retorna la información solicitada en el formato adecuado.

1 Es una especificación para redes inalámbricas de área personal (WPANs) que hace posible transmitir voz y

datos entre distintos dispositivos mediante un enlace por radiofrecuencia segura y globalmente libre. 2 Es una aplicación que convierte comandos o datos de un formato hacia otro.

Page 19: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

6

1.6 Trabajos relacionados

En esta sección se presentan algunos trabajos que muestran la tendencia actual en el desarrollo de aplicaciones móviles con sistemas de ubicación y mapas.

1.6.1 WALLIP: Una plataforma de servicios con percepción contextual basada en localización

En WALLIP [Vazquez05], se desarrolló una infraestructura para desplegar aplicaciones móviles, sensibles a información contextual de localización y preferencias del usuario que facilite el uso de servicios móviles. Estas aplicaciones móviles sensibles, disponibles en el dispositivo del usuario, vigilan y notifican cualquier tipo de incidencia de interés.

La plataforma WALLIP proporciona tres servicios que permiten el desarrollo y despliegue de aplicaciones sensibles al contexto del usuario:

Servicio de Movilidad. Encargado de proporcionar el traspaso vertical entre las redes WiFi y GPRS.

Servicio de Gestión de Perfiles. Controla el acceso y gestiona las diferentes características de los servicios para cada usuario o aplicación.

Servicio de Localización. Proporciona las coordenadas del lugar donde se encuentra un usuario en el momento en que se efectúa la consulta.

Para comprobar la utilidad de WALLIP, los autores diseñaron dos aplicaciones en ámbitos diferentes: una aplicación de asistencia turística para visitantes (ASTUR) y una aplicación de gestión de incidencias técnicas para empresas. Ambas utilizan la infraestructura WALLIP que les permite percibir la localización del usuario y basándose en su perfil, ofrecer la información más apropiada para cada caso.

1.6.2 d-Ruta, un sistema móvil de información turística

d-Ruta [Compte07] es un servicio basado en localización diseñado para visualizar, planificar, seguir, interactuar, mantener y distribuir información de rutas turísticas y sus puntos de interés asociados, en la Vall de Ribes, en el Pirineo catalán (España).

Las principales características del sistema d-Ruta son: la transmisión de la información distribuida en los dispositivos móviles se realiza vía Web; el servicio permite actualizar toda la información incorporada en el sistema de rutas y eventos; el dato de localización del usuario se obtiene de un GPS y se transmite a través de un dispositivo PDA mediante un servicio de redes de comunicación (GPRS); los dispositivos móviles permiten interactuar con la información cartográfica que se recibe a través de diferentes herramientas de navegación y menús de selección; la aplicación se desarrolló bajo la plataforma J2ME y los mapas se obtienen del servidor de mapas MapServer.

Page 20: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

7

1.6.3 Indoor and outdoor location based services for portable wireless devices

El trabajo que se presenta en [DiFlora05], propone una arquitectura de software portátil para sensibilidad de localización en interiores y exteriores. Se basa en un método de proximidad llamado ZONING con dispositivos Bluetooth y GPS como sensores de localización. Cada zona conocida se representa como un objeto de referencia al cual se le asigna una serie de atributos, incluyendo un nombre, coordenadas y una descripción textual.

La arquitectura de software se compone por tres elementos: el agente de comunicación, el agente de descubrimiento y el agente de localización. El agente de descubrimiento se usa en escenarios interiores. El agente de comunicación sirve para entregar la información de localización al servidor de usuarios. El agente de localización es el componente que determina la posición del usuario en escenarios interiores y exteriores.

1.6.4 MAP Suite Pocket PC

Map Suite Pocket PC [MapSuite] es una herramienta para desarrollar aplicaciones de mapas GIS para Pocket PCs y otros dispositivos móviles con Windows Mobile 2003. Su plataforma de desarrollo es Microsoft Visual Studio 2005 IDE y Microsoft .NET Compact Framework 2.0. Los lenguajes que soporta son: Visual Basic .NET; C#; J#; y cualquier otro lenguaje compatible con .NET.

Los formatos de mapas que soporta la suite son shapefiles (.shp) y raster MrSID. Proporciona clases para definir los controles de la interfaz del usuario para interactuar con el mapa.

1.6.5 OziExplorerCE

OziExplorerCE [Ozi] es un software para crear mapas para Pocket PCs y PDAs con sistema operativo Windows CE. Utiliza imágenes de mapas raster que el usuario puede escanear o comprar en formato digital. El formato de los mapas creados con este software es ozfx3. Incluye una utilería para convertir otro tipo de mapas al formato mencionado. No soporta mapas de tipo vectorial.

Para diseñar y calibrar los mapas con las rutas, puntos de interés, etiquetas, etc., es necesario instalar la versión completa del software OziExplorer para PC. Los mapas se pueden transferir de la PC al dispositivo móvil para ser utilizado por el usuario.

1.6.6 Natural Language Query Interface in SMS/MMS-based Spatial Information Service

En el trabajo desarrollado en [NLQ07] se propone una interfaz para un acercamiento a la extracción semántica de consultas en lenguaje natural (NLQ, Natural Language Query por sus siglas en inglés) para entender la semántica espacial de una consulta y regresar el

Page 21: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

8

resultado geográfico o mapas al usuario en un dispositivo móvil a través de mensajería SMS/MMS.

1.6.7 Map24 Mobile Kit

Map24 Mobile Kit [Map24] es una API desarrollada en C++ para crear aplicaciones en dispositivos móviles. El kit incluye funcionalidades para manejar diálogos, soporte de interfaces de usuario, conexiones y comunicaciones de los usuarios a servicios como rutas, geocodificación, búsqueda de lugares cercanos, entre otros. También proporciona una aplicación, compatible con diversos dispositivos móviles, para acceder a los mapas disponibles en su página Web vía una conexión móvil de Internet.

1.6.8 Representation of classic maps for mobile devices. An interactive mobile map application

La aplicación que se presenta en [Garofalakis07], se desarrolló en lenguaje C# y es un sistema que muestra y administra datos geográficos de ciudades en dispositivos móviles con sistema operativo Microsoft Windows.

El usuario de la aplicación puede navegar a través del mapa y obtener información útil de lugares como museos y teatros. Los datos geográficos para los mapas digitales se almacenan en archivos binarios shapefiles. Estos archivos se transforman al formato MIF (MapInfo Data Interchange Format) para generar los datos de entrada que posteriormente se pueden transferir desde una computadora personal al dispositivo móvil por medio de Bluetooth. La aplicación parsea los datos geográficos del archivo binario y aplica un número de transformaciones para dibujar el mapa y mostrar los datos.

1.6.9 Análisis comparativo

En los apartados anteriores de esta sección, se describieron algunos trabajos relacionados con la tesis que se presenta en este documento. La revisión de estos trabajos permitió conocer sus características y establecer las principales diferencias con respecto a esta tesis. Los trabajos están orientados hacia aplicaciones LBS, es decir, proporcionan al usuario servicios de localización e interacción con mapas a través de dispositivos móviles. En general, la transferencia de información que se realiza entre el cliente y el servidor para definir y resolver las consultas de los usuarios se lleva a cabo por medio de SOAP, HTTP y GPRS. Esto obliga al usuario a mantener una conexión a Internet a través de una red inalámbrica o por medio del servicio de transferencia de datos GPRS. El inconveniente de éste último es que el cliente debe pagar por el total de información que envíe y reciba, lo cual puede resultar costoso. El trabajo realizado en [NLQ07], utiliza el servicio de mensajería SMS/MMS para enviar información; sin embargo, su investigación se centra en la extracción semántica de consultas

Page 22: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

9

espaciales en lenguaje natural para retornar las instancias geográficas o mapas al usuario y no abunda en la forma en que utiliza la mensajería SMS/MMS. En [Garofalakis07], la información geográfica se almacena en la memoria del dispositivo móvil para evitar la necesidad de una conexión a Internet. La principal desventaja de este trabajo radica en el hecho de que el usuario debe cargar previamente en el dispositivo los archivos binarios que le permitirán representar los mapas y obtener la información de los sitios de interés que desea. En cuanto al tipo de imagen, los formatos que observan son dos: raster y vectorial. Las imágenes raster pierden calidad al aumentar su tamaño y la cantidad de memoria que ocupan es considerable. Las imágenes vectoriales no pierden calidad si se aumenta su tamaño, no ocupan mucha memoria pero requieren mayor capacidad de procesamiento que una imagen raster. De acuerdo con lo anterior, las principales ventajas de esta tesis con respecto a los trabajos relacionados presentados son:

Es una API y no una aplicación. La API permitirá a un programador crear aplicaciones LBS según sus necesidades y requerimientos.

Las tecnologías que se utilizan para enviar información son: SMS, MMS y HTTP. El servicio de mensajería SMS/MMS evita la necesidad de mantener una conexión persistente para enviar y recibir información. Sin embargo, la API también proporciona soporte para realizar conexiones a Internet a través del protocolo HTTP. De esta forma, el programador cuenta con distintas opciones para crear aplicaciones que resuelven las necesidades de ubicación de un usuario, ya sea de manera textual o por medio de un mapa.

Técnica de posicionamiento. La localización del usuario se establece a partir de un dispositivo GPS (Bluetooth o integrado al móvil). Si no se cuenta con GPS, es posible obtener la ubicación a partir de información que el dispositivo móvil obtenga por medio de la red de la compañía telefónica, aunque esto puede tener un costo para el usuario.

Mapas vectoriales SVG Tiny. Este tipo de gráficos son una recomendación de W3C y es un estándar abierto. El tamaño del archivo que genera es pequeño al estar basado en XML, esta característica tiene gran importancia debido a los recursos limitados de los dispositivos móviles. Aunque SVG es un estándar de reciente aparición, las empresas telefónicas se encuentran trabajando conjuntamente para adoptarla como el formato oficial para gráficos 2D (ver sección 2.9 y anexo E).

La plataforma de desarrollo es J2ME. Actualmente, una gran variedad de dispositivos móviles soportan la especificación Java J2ME, ya que proporciona un conjunto de APIs que permiten desarrollar aplicaciones para distintos fines y orientado a un amplio rango de dispositivos.

La tabla 1.1 muestra un resumen de los trabajos relacionados. Se incluye el trabajo de tesis de este documento.

Page 23: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

10

Tabla 1.1 Resumen comparativo de los trabajos relacionados. Trabajo LBS Tecnología

utilizada para enviar información

Plataforma/Lenguaje de desarrollo

Técnica de localización

Tipo de mapa

[Vazquez05] Si Servicios Web SOAP/HTTP

Lenguaje basado en XML

WiFi/GPRS No se especifica

[Compte07] Si GPRS J2ME GPS Raster y vectoriales (MapServer)

[DiFlora05] Si GSM/GPRS J2ME GPS y sensores Bluetooth

Mapas topológicos (no se especifica formato)

[MapSuite] Si Servicios Web Microsoft Visual Studio 2005/Microsoft .NET Compact Framework 2

No se especifica

Vectoriales (shapefiles) y raster (MrSID)

[Ozi] Si No aplica No se especifica GPS Raster (Ozfx3)

[NLQ07] Si SMS/MMS No se especifica No se especifica

No se especifica

[Map24] Si GPRS C++ GPS Vectorial

[Garofalakis] Si No aplica C# No aplica Vectorial (MIF)

TESIS Si SMS, MMS, HTTP J2ME GPS (Bluetooth e interno) y red de telecomunica- ción móvil

Vectorial (SVG Tiny)

1.7 Alcances y limitaciones

1.7.1 Alcances

La API desarrollada proporciona servicios para: o Recibir y procesar mensajes SMS/MMS. o Obtener la posición del dispositivo móvil. o Representar puntos de interés sobre el mapa. o Visualizar e interactuar con la imagen del mapa a través del teclado y botones del

dispositivo. o Establecer conexión a Internet por medio del protocolo HTTP.

Para realizar consultas, la ubicación del usuario se puede establecer a través de información que éste proporcione (calle, número, colonia, código postal, ciudad) en el mensaje SMS, o bien, mediante la información que se obtiene del dispositivo móvil o dispositivo GPS (interno o Bluetooth).

La conexión a Internet permite solicitar un mapa a un servidor de mapas específico desde el dispositivo móvil.

El formato de los mapas que soporta la API es SVG Tiny.

Page 24: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 1: Introducción

11

1.7.2 Limitaciones

La API desarrollada está dirigida a dispositivos móviles que soporten como mínimo la configuración Java CLDC 1.1 (JSR 139) y el perfil MIDP 2.0 (JSR 118).

Los dispositivos móviles deben soportar las siguientes APIs para J2ME: o Location API (JSR 179). o Wireless Messaging API (WMA) 2.0 (JSR 205). o Scalable 2D Vector Graphics API (JSR 226).

En este trabajo de tesis no se contempló la generación del mapa vectorial SVG que se devuelve en las consultas. Las fuentes que proporcionarán los mapas serán servidores de mapas como GeoServer y MapServer.

1.8 Organización del documento

El documento de tesis se organizó en 6 capítulos cada uno de lo cuales presenta la siguiente información: Capítulo 2 Marco Teórico. Describe los conceptos relevantes del tema de investigación desarrollado que facilitarán la comprensión de este trabajo. Capítulo 3 Análisis y Diseño. Presenta los diagramas de casos de uso, diagramas de actividad y diagramas de secuencia que resultaron durante la etapa de análisis y diseño de la API desarrollada en esta tesis. Capítulo 4 Implementación. Contiene la descripción de las clases que integran la API y la manera de utilizarlas. Capítulo 5 Pruebas. Presenta las pruebas y los resultados obtenidos que permitieron verificar el funcionamiento de la API de acuerdo a un plan de pruebas elaborado conforme al estándar IEEE 829-1998. Capítulo 6 Conclusiones y trabajos futuros. Presenta las conclusiones, aportaciones y trabajos futuros de la investigación realizada en esta tesis, de acuerdo a los resultados obtenidos y experiencia adquirida. Anexos. Contienen la documentación de la API, el código fuente de las aplicaciones creadas para probar la API, el Plan de Pruebas elaborado, la estructura de un mensaje MMS y por último, una lista de dispositivos móviles que soportan la API de gráficos SVG para J2ME.

Page 25: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 2 MARCO TEÓRICO

Este capítulo presenta los conceptos de las tecnologías y estándares que se utilizaron durante la investigación y que enmarcan el tema de tesis.

Page 26: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

13

2.1 API

Una interfaz de programación de aplicaciones (API, Application Programming Interface por sus siglas en inglés) es el método específico prescrito por el sistema operativo de una computadora o por un programa de aplicación a través del cual un programador que escribe un programa puede hacer peticiones al sistema operativo u otra aplicación [Whatis].

Una API es una serie de comandos, funciones y protocolos que los programadores pueden usar cuando construyen software para un sistema operativo específico. La API permite a los programadores usar funciones predefinidas para interactuar con el sistema operativo en lugar de escribirlos desde el principio. Mientras la API hace más fácil el trabajo del programador, también beneficia al usuario final ya que asegura que todos los programas que usan la misma API tendrán una interfaz de usuario similar [TechTerms].

2.2 Dispositivos móviles

Ante la gran demanda y auge de dispositivos móviles ha surgido la necesidad de clasificarlos. Actualmente, esto resulta difícil porque existen en el mercado dispositivos que pueden caer en más de dos clasificaciones.

El problema de la clasificación se debe a varios factores, uno de estos factores consiste en que los dispositivos móviles son muy dinámicos y realizan más funciones de las que originalmente tenían contempladas [Olivares06].

De acuerdo con [Kalinin03], desde el punto de vista del programador, la clasificación más razonable es de acuerdo al sistema operativo. Como una regla, una compañía fabricante de dispositivos móviles implementa un sistema operativo. Por esta razón, conociendo el nombre del dispositivo (o incluso el fabricante) se puede determinar su sistema operativo (Windows CE, Symbian, Blackberry, etc.).

2.2.1 Teléfono Celular

De acuerdo con [Wiki08a], el teléfono celular es un dispositivo inalámbrico electrónico que permite tener acceso a la red de telefonía celular o móvil. Su principal característica es su portabilidad, que permite comunicarse desde casi cualquier lugar. Aunque su función es la comunicación de voz, como el teléfono convencional, su rápido desarrollo ha incorporado otras funciones como son cámara fotográfica, agenda, acceso a Internet e incluso GPS.

2.2.2 Pocket PC/PDA

Según [Olivares06], Microsoft define un Pocket PC como un dispositivo de mano que permite grabar, enviar y recibir e-mails, contactos, citas, mostrar archivos multimedia, juegos, intercambiar mensajes de texto con MSN Messenger, navegar por la Web y más. Los dispositivos Pocket PC están clasificados dentro del segmento de PDAs (Personal Digital Assistant).

Page 27: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

14

Como ya se mencionó, es frecuente diferenciar a los PDAs en función de su sistema operativo:

Palm (antes Palm Pilot) utilizan el sistema operativo Palm OS.

Pocket PC, utilizan el sistema operativo Windows Mobile de Microsoft.

BlackBerry utilizan un sistema operativo propio para los BlackBerry.

2.2.3 Smartphone (Teléfono inteligente)

De acuerdo con [Microsoft08], un smartphone incluye la memoria y la eficacia de procesamiento de un equipo pequeño en la carcasa de un teléfono móvil habitual. Debido al aumento de potencia de los dispositivos, se suele considerar que un smartphone es un PDA de tamaño reducido. Los smartphones están diseñados para funcionar con una sola mano con acceso de teclado a las funciones de voz y de datos. Algunas características adicionales son: navegación por Internet, gestión de tareas, agenda, documentos, reproducción de audio y video, entre otros. Las aplicaciones en un smartphone se aproximan a lo que se espera de un equipo de escritorio y quizás lo que es más importante, pueden sincronizarse con éstos.

2.3 Imagen vectorial

Los gráficos vectoriales son aquellos que se representan en una computadora por medio de "trazos", es decir, por primitivas geométricas como puntos, líneas, curvas o polígonos (ver figura 2.1). En éstos, la imagen se genera como descripción de trazos. Por ejemplo, para crear un segmento de línea recta se indica: su punto inicial (x1, y1), su punto final (x2, y2), su grosor, color, entre otros [Wiki07a]. Un sistema de mapas basado en gráficos vectoriales no sólo contiene la descripción del gráfico en la pantalla, también puede cifrar los atributos de los objetos que se muestran en el mapa. Esta información adicional se puede recuperar por un puntero o por opciones de

Figura 2.1 En el modelo de datos vectorial los objetos se describen como puntos, líneas o áreas (polígonos). Estos elementos existen como elementos geométricos no como objetos físicos.

Page 28: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

15

clic. Además, los gráficos vectoriales permiten zoom3 y paneo4 del mapa sin pérdida de resolución en pantalla [Divya04].

2.4 Imagen raster

Una imagen rasterizada, también llamada bitmap, es una estructura o archivo de datos que representa generalmente una rejilla rectangular de píxeles o puntos de color denominada raster, en el monitor de una computadora, papel u otro método de representación. El color de cada píxel está definido individualmente; por ejemplo, una imagen en un espacio de color RGB, almacenaría el valor de color de cada píxel en tres bytes: uno para el verde, uno para el azul, y uno para el rojo [Wiki07b].

En los gráficos de tipo raster, el área del mapa se reparte en celdas. Cada celda tiene un valor físico (ver figura 2.2).

2.5 J2ME

Como se explica en [Sun08], J2ME (Java 2 Micro Edition por sus siglas en inglés) es una colección de tecnologías y especificaciones que se pueden combinar para construir programas en Java, específicamente para cubrir los requerimientos de un dispositivo móvil en particular o mercado.

La tecnología Java ME se basa en tres elementos:

Una configuración. Proporciona un conjunto de bibliotecas básicas y máquinas virtuales para un amplio rango de dispositivos.

Un perfil. Es un conjunto de APIs que soportan el más estrecho rango de dispositivos.

Un paquete opcional. Es una serie de APIs de tecnología específica.

3 Es la capacidad de aumentar (zoom-in) o reducir (zoom-out) el tamaño de una imagen.

4 Es el movimiento o desplazamiento que se realiza sobre una imagen en distintas direcciones para tener

una visión completa de ésta cuando se observa en una pantalla de menor tamaño.

Código de las celdas: 1 = Bosque 2 = Carretera 3 = Casa

Figura 2.2 Los datos de un mapa raster se visualizan como una rejilla sobrepuesta sobre un terreno. Cada celda almacena un código que describe el terreno de una celda en particular.

Page 29: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

16

La plataforma Java ME se divide en dos configuraciones básicas: una para dispositivos móviles limitados y otra dirigida hacia dispositivos móviles de mayor capacidad como PDAs y cajas set-top5.

La configuración dirigida a dispositivos de recursos limitados como teléfonos móviles se llama Connected Limited Device Configuration (CLDC). Está específicamente diseñada para satisfacer las necesidades de una plataforma Java que se ejecuta en dispositivos con memoria, poder de procesamiento y capacidades gráficas limitadas.

La configuración dirigida a dispositivos con mayor capacidad y con una conexión de red, como PDAs y cajas set-top, se llama Connected Device Configuration (CDC).

2.6 Mensajería SMS

De acuerdo con la definición de [Roldan05], el servicio de mensajes cortos SMS (Short Message Service) permite enviar mensajes compuestos por un máximo de 140 bytes (el número de caracteres depende de la codificación que se utilice).

Un mensaje SMS se compone por una cabecera en la que se indican datos relativos al protocolo de transmisión del mensaje (dirección de origen, tipo de codificación, etc.) y el cuerpo del mensaje que contiene el texto que se transmite (ver figura 2.3).

1120 bits

Codificación de 7 bits: 160 caracteres (mensaje de texto latino). Codificación de 6 bits: 140 bytes (mensaje de datos). Codificación Unicode: 70 caracteres (mensaje de texto griego o árabe).

El servicio SMS emplea los canales de señalización y control de la red GSM. La comunicación a través de un mensaje SMS es una comunicación en tiempo diferido, es decir, que no existe ninguna conexión directa entre los dos extremos. De hecho, la red almacena el mensaje antes de enviarlo durante un corto espacio de tiempo (generalmente entre 0,5 y 2 s). Las aplicaciones más comunes de los SMS son las destinadas al público en general. Es posible clasificarlas en cuatro grandes grupos:

Información. Envío de información al usuario sobre algún tema en concreto como: horóscopo, eventos deportivos, noticias, clima, entre otros (requiere suscripción).

Personalización. Descarga de logos, melodías, fondos de pantalla, imágenes, fotos, etc.

5 Dispositivo electrónico que tiene la capacidad de captar y distribuir varias señales procedentes de muchos

tipos de redes de comunicación como: radio, televisión, satélite, cable, internet, etc.

Figura 2.3 Estructura de un mensaje SMS.

DATOS CABECERA

Page 30: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

17

Chat. Consiste en el intercambio de mensajes SMS.

Entretenimiento. El usuario que envía un SMS participa en un juego, concurso, sorteo, etc.

2.7 Mensajería MMS

MMS (Multimedia Messaging System) es una evolución de SMS para enviar mensajes multimedia. MMS ofrece mayor flexibilidad en el contenido del mensaje ya que, además de mensajes de texto, soporta otro tipo de formatos (sonidos, animaciones, imágenes, etc.) e integra otros servicios de mensajería como el correo electrónico o los mensajes de voz. El usuario puede escribir el mensaje MMS desde su teléfono móvil, su computadora, su PDA o cualquier otro dispositivo con un cliente MMS instalado [Roldan05].

El servicio MMS permite adjuntar archivos y como valor agregado y diferenciador permite utilizar presentaciones animadas. Esto es posible mediante la inclusión de un elemento de presentación llamado SMIL (Synchronized Multimedia Integration Language) que permite componer un mensaje por varias páginas consecutivas, denominadas slides, cada una con un tiempo de presentación que se determina al formar el mensaje (ver figura 2.4). Cada slide contiene uno o varios de los siguientes campos: texto, imágenes (simples o animadas), sonido e incluso vídeo [Telefonica07]. En el anexo D se presenta de forma más detallada la estructura de un mensaje MMS. MMS es un estándar abierto, especificado por el Foro WAP (Wireless Application Protocol) y 3GPP (Third Generation Partnership Project). La especificación de 3GPP define la arquitectura de la red y funciones generales. La especificación del Foro WAP define la encapsulación de los mensajes y los protocolos de aplicación. Sin embargo, el estándar no especifica un tamaño máximo para un MMS. Esto es para asegurar la interoperabilidad futura y evitar limitaciones similares a las de los mensajes SMS. El tamaño del mensaje depende del operador, quien probablemente establezca un tamaño estandarizado para propósitos particulares [Nokia07].

2.8 Sistema GPS

Como se explica en [Rabbany02], el sistema de posicionamiento global (GPS, Global Positioning System por sus siglas en inglés) es un sistema de navegación basado en 24 satélites que fue desarrollado por el Departamento de Defensa de los Estados Unidos. Inicialmente, GPS inició como un sistema militar para cumplir con las necesidades militares de los Estados Unidos; sin embargo, más tarde estuvo disponible para los usuarios civiles.

Figura 2.4 Esquema de composición de páginas en un mensaje MMS.

Page 31: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

18

GPS proporciona información de posicionamiento y tiempo continuos, en cualquier parte del mundo bajo cualquier condición de clima. Debido a que es de utilidad a un número ilimitado de usuarios y se usa para cuestiones de seguridad, el GPS es un sistema de un sólo sentido (pasivo). Esto significa que los usuarios sólo pueden recibir las señales del satélite a través de un receptor.

La idea es que el sistema depende de un receptor que obtiene simultáneamente señales de al menos cuatro satélites para determinar la longitud, latitud y altitud. Los sistemas GPS comerciales ofrecen una exactitud posicional de 100 metros en la dimensión horizontal y 160 metros en la dimensión vertical. Estos valores se combinan para ofrecer una exactitud tridimensional dentro de los 100 metros en cualquier dimensión [Thurwachter02].

2.9 SVG (Scalable Vector Graphics)

Como se explica en [W3C08], SVG es un lenguaje para describir gráficos bidimensionales en XML. Soporta tres tipos de objetos gráficos: figuras vectoriales (por ejemplo rutas formadas por líneas rectas y curvas), imágenes y texto. Estos objetos se pueden agrupar, estilizar, transformar y componer en nuevos objetos previamente representados.

SVG se usa en muchas áreas de negocios incluyendo gráficos Web, animaciones, interfaces de usuario, aplicaciones móviles, entre otros. Sus principales características son [Devmobi]:

Forma compacta de representar gráficos vectoriales.

Son gráficos escalables, es decir, es posible aumentar o modificar su tamaño arbitrariamente sin pérdida de calidad.

Es un estándar abierto, es una recomendación de W3C (World Wide Web Consortium).

Está basado en XML (Extensible Markup Language).

SVG se integra con otros estándares como DOM 6 (Document Object Model) y XSL (Extensible Stylesheet Language).

SVG surgió para cubrir las necesidades de diversos casos de uso para gráficos bidimensionales orientados a computadoras de escritorio; sin embargo, la industria móvil se unió al grupo de trabajo de W3C para especificar un perfil dirigido a dispositivos móviles. Estas demandas originaron inicialmente dos perfiles SVG: SVG Full y SVG Mobile. La especificación SVG Mobile está dirigida a dispositivos de recursos limitados y es parte de la plataforma 3GPP para la tercera generación de teléfonos móviles. Un único perfil móvil no es suficiente para una gran variedad de dispositivos debido a las distintas características en términos de velocidad de CPU, memoria y soporte de colores. Por esta razón, se definieron dos perfiles dirigidos al amplio rango de familias de dispositivos:

SVG Basic. Dirigido a PDAs y dispositivos móviles de última generación con capacidades avanzadas.

SVG Tiny. Dirigido a dispositivos móviles como smarthphones y teléfonos celulares de capacidades limitadas.

6 Es un modelo computacional a través del cual los programas y scripts pueden acceder y modificar

dinámicamente y en tiempo real el contenido, estructura y estilo de los documentos HTML y XML.

Page 32: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 2: Marco Teórico

19

Los perfiles SVG se pueden mostrar como una pirámide que represente las capacidades computacionales de los dispositivos para los cuales está dirigido un perfil en específico así como las características SVG que soporta (ver figura 2.5). En la parte alta y media de la pirámide se encuentra el conjunto de características de los teléfonos móviles y PDAs y en la base, el conjunto de características correspondientes a una computadora de escritorio [OReilly].

La principal diferencia entre SVG Tiny y SVG Basic es que SVG Tiny no proporciona soporte para scripts y definición de estilos. Esto para evitar desbordamiento de memoria al mantener el modelo de objeto del documento (DOM). La figura 2.6 muestra un ejemplo de código fuente SVG y el gráfico que representa.

CODIGO DE UNA IMAGEN SVG TINY RESULTADO

1

<?xml version="1.0" encoding="UTF-8"?>

2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG Tiny 1.1//EN"

3 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">

4 <svg width="240" height="220" version="1.1"

5 xmlns="http://www.w3.org/2000/svg"

6 baseProfile="tiny">

7 <circle id="circle" cx="75" cy="75" r="25" fill="#C8C800" fill-opacity="0.5"

8 stroke="#000000" stroke-width="5.0"/>

9 <rect id="rect" x="75" y="75" width="50" height="50" fill="#640000"

10 fill-opacity="0.5" stroke="#000000" stroke-width="5.0" />

11 </svg>

La extensión de una imagen SVG, independientemente del perfil del que se trate es svg. El tipo de MIME (Multipurpose Internet Mail Extensions) de estos gráficos es image/svg+xml. En el anexo E se muestra una lista de dispositivos que soportan este tipo de imágenes.

Figura 2.5 Perfiles SVG.

Perfil MOBILE

Perfil FULL

Figura 2.6 Código fuente de una imagen SVG Tiny.

Page 33: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 3 ANÁLISIS Y DISEÑO

Este capítulo presenta la especificación de requerimientos, el análisis y diseño de la API desarrollada con los puntos importantes de estas etapas. Se define la arquitectura, los casos de uso, los diagramas de actividad, los diagramas de secuencia y los diagramas de clase de la API.

Page 34: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

21

3.1 Especificación de requerimientos

En las siguientes secciones se describen las características y necesidades del trabajo de tesis desarrollado. Los requerimientos de la API se especificaron tomando como base la descripción del problema, el objetivo, los alcances y limitaciones descritos anteriormente.

3.1.1 Ámbito

La API SMS para el procesamiento de consultas Georeferenciadas/No Georeferenciadas [Ruiz07], permite la localización de usuarios de dispositivos móviles mediante consultas a través del servicio de mensajería SMS y el sistema GPS (a partir de este punto se referenciará a este trabajo como API SMS).

Las consultas georeferenciadas se realizan mediante el sistema de posicionamiento global GPS para obtener la ubicación actual del dispositivo móvil. De esta manera, el usuario sólo debe proporcionar información que defina el tipo de servicio que desea localizar.

En las consultas no georeferenciadas, el usuario debe especificar el tipo de servicio a localizar y proporcionar información que permita establecer su ubicación actual como: calle, número, colonia, código postal, ciudad. Esto se realiza cuando no se cuenta con un dispositivo GPS que permita la ubicación de manera automática.

La API SMS se diseñó en el marco de los servicios basados en localización (LBS), la cual permite identificar cuatro tipos de objetos: punto de interés, camino, evento y clima. Cuando un usuario solicita alguno de estos servicios a través de un mensaje SMS, obtendrá su respuesta en un mensaje del mismo tipo.

La API de este trabajo de tesis (a partir de este punto se referenciará como API SMS/MMS), debe extender la funcionalidad de la API SMS con servicios que permitan procesar y representar gráficamente puntos de interés en un mapa que el usuario pueda visualizar y manipular en su dispositivo móvil. Para esto, debe implementar servicios que permitan recibir mensajes MMS, establecer conexión a Internet por medio del protocolo HTTP y obtener la posición geográfica del usuario a partir de información que proporcione el dispositivo móvil vía GPS u otra técnica de localización disponible. Los servicios básicos que la API SMS/MMS proporcionará con respecto a la manipulación del mapa en el dispositivo son: zoom-in, zoom-out paneo y vista original.

3.1.2 Descripción General de la API SMS/MMS

3.1.2.1 Perspectiva del producto

La API SMS/MMS debe ser una herramienta de programación que permita crear aplicaciones bajo el marco de los servicios basados en localización. Su principal función será la búsqueda de servicios y puntos de interés cercanos a la posición geográfica del usuario para representarlos de manera gráfica en un mapa. Este tipo de aplicaciones proporcionan

Page 35: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

22

un valor agregado al dispositivo móvil, ya que ayudan a las personas a tomar decisiones en un momento y lugar determinados.

La API SMS/MMS basará su funcionamiento en las siguientes tecnologías: J2ME, mensajería SMS/MMS, HTTP y GPS.

3.1.2.2 Funciones de la API

Las funciones que proporciona la API SMS son las siguientes:

Obtener información de ubicación a partir de un dispositivo GPS Bluetooth.

Elaborar trama. Permite elaborar distintos tipos de tramas para realizar una consulta SMS de sitios de interés.

Enviar trama. Establece conexión con el destino para enviar la trama de consulta en un mensaje SMS.

Recibir respuesta. Permite recibir un mensaje SMS que contiene una trama de respuesta de una consulta específica.

Interpretar trama. Permite interpretar las tramas de consulta para conocer la información que contienen.

Las funciones a desarrollar para la API SMS/MMS son:

Formar trama para solicitar un mapa.

Recibir respuesta en un mensaje MMS.

Procesar imágenes de mapas SVG.

Representar puntos interés sobre un mapa.

Trazar camino.

Obtener datos de localización del dispositivo móvil.

Implementar conexiones HTTP.

Visualizar e interactuar con el mapa a través del dispositivo móvil.

3.1.2.3 Descripción de las funciones

En las siguientes secciones se describen de manera detallada las funciones a desarrollar para la API SMS/MMS.

3.1.2.3.1 Formar trama para solicitar un mapa

Para implementar esta función, se agregará un dato a las tramas de consulta de la API SMS para establecer si el usuario solicita o no el mapa de su ubicación. La trama está formada por tres campos: Cabecera, Datos y Datos extra (ver figura 3.1). El dato para solicitar el mapa se anexará al final del campo Datos.

Cabecera

Datos

Datos extra

Figura 3.1 Trama del mensaje SMS.

Page 36: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

23

3.1.2.3.2 Recibir respuestas en un mensaje MMS

Esta función permitirá recibir un mensaje de respuesta MMS en el dispositivo móvil por medio de una aplicación LBS.

Si el usuario solicitó un mapa, entonces recibirá un mensaje MMS con la imagen del mapa como archivo adjunto.

El tamaño máximo de un mensaje multimedia para un dispositivo móvil depende del fabricante así como de las operadoras telefónicas. Sin embargo, la especificación OMA (Open Mobile Alliance) [OMA] establece que el tamaño máximo del mensaje puede estar entre 30 y 600 KB, según el tipo de contenido.

De acuerdo a lo anterior y tomando en cuenta las limitaciones que se describen en la sección 3.2.2, se recomienda que el peso de la imagen del mapa no supere los 250KB. El objetivo es evitar que el tamaño del contenido del mensaje MMS cause problemas, tanto en la aplicación como en el dispositivo móvil.

3.1.2.3.3 Procesar imágenes SVG

Esta función permitirá procesar imágenes de mapas para que se visualicen correctamente en el dispositivo móvil.

El formato de la imagen del mapa a utilizar es SVG Tiny. Este tipo de gráficos son escalables, es decir, al aumentar su tamaño no pierden calidad de presentación como sucede con los gráficos raster. Además, el tamaño de un archivo SVG es muy pequeño si se compara con un gráfico similar en formato JPEG. Esto permitirá que el mapa no consuma demasiados recursos de procesamiento y memoria del dispositivo móvil para cargar y mostrar la imagen correctamente. Las resoluciones que [OMA] ha establecido de acuerdo al contenido del mensaje multimedia son:

160x120 (o menor) para una imagen básica.

640x480 (o menor) para imágenes y video ricas en contenido.

1200x1600 (o menor) para un mensaje rico en contenido.

Con base en lo anterior, se recomienda que la resolución mínima para las imágenes de los mapas de este proyecto sea mayor a 160x120 y menor a 1200x1600, dependiendo de las capacidades del dispositivo móvil.

3.1.2.3.4 Representar puntos de interés sobre un mapa

Esta función permitirá representar puntos de interés en un mapa SVG previamente almacenado en el dispositivo móvil del usuario. Los puntos de interés que éste solicite se podrán agregar a la imagen del mapa a partir de una trama de respuesta SMS que contenga información válida (coordenadas y texto) para dibujarlos.

Page 37: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

24

3.1.2.3.5 Trazar camino

Este servicio deberá agregar nuevos elementos (puntos y líneas) al mapa para representar un camino. La API SMS define una trama para solicitar un camino. El usuario especifica el punto de inicio y el punto final (georeferenciado o no georeferenciado) y envía su consulta en un mensaje SMS. Se esperará como respuesta un conjunto de puntos que permitan trazar un camino sobre un mapa SVG.

3.1.2.3.6 Obtener datos de localización del dispositivo móvil

Con este servicio se debe obtener el punto de localización del dispositivo móvil (en términos de latitud, longitud y altitud) a partir de un GPS interno al dispositivo o alguna otra técnica de localización que utilice la infraestructura de la operadora móvil para determinar la posición del usuario. La implementación de este servicio permitirá al usuario realizar consultas georeferenciadas aprovechando al máximo la tecnología de su dispositivo móvil.

3.1.2.3.7 Implementar conexiones HTTP

Se implementará un servicio que permita establecer una conexión a Internet a través del protocolo HTTP para realizar peticiones de tipo solicitud/respuesta de mapas con puntos de interés y servicios.

Con esto, el programador tendrá la posibilidad de elegir la manera de enviar/recibir información entre la aplicación LBS y el servidor de consultas y mapas, ya sea por medio de mensajería SMS/MMS, o bien, por Internet a través una conexión HTTP.

3.1.2.3.8 Visualizar e interactuar con el mapa a través del dispositivo móvil

Para visualizar e interactuar con el mapa y la información que éste contiene a través del dispositivo móvil, se desarrollarán cuatro funciones básicas:

Zoom-in. Aumentar el tamaño de la imagen para visualizar con más detalle una zona del mapa.

Zoom-out. Disminuir el tamaño de la imagen para visualizar con menor detalle una zona del mapa.

Paneo. Es el movimiento que permite desplazar el mapa a través de la pantalla del dispositivo móvil en 4 direcciones posibles: arriba, abajo, izquierda y derecha.

Vista original. Restablecer el tamaño original de una imagen después de haber aumentado o disminuido la vista del mapa con las funciones zoom-in y zoom-out.

Page 38: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

25

3.1.2.4 Usuarios de la API SMS/MMS

Programadores. La API SMS/MMS está dirigida a programadores de dispositivos móviles. Permitirá crear aplicaciones que soporten servicios basados en localización y mapas haciendo uso de tecnologías como: mensajería SMS/MMS, HTTP y GPS, para localizar servicios y puntos de interés.

Usuario final. Este tipo de usuario es aquel que obtendrá los beneficios de la API SMS/MMS a través de una aplicación LBS que la implemente. Le permitirá resolver necesidades de ubicación en términos de servicios y puntos de interés, con la ayuda de un mapa o con información textual que podrá recibir por medio del servicio de mensajería de su dispositivo móvil o una conexión a Internet.

3.2 Análisis

En esta sección se describe la arquitectura de la API SMS/MMS desarrollada. Como parte de esta fase, se presenta un análisis de las limitaciones de los dispositivo móviles y se muestran los casos de uso que describen los escenarios de interacción entre la API y una aplicación LBS.

3.2.1 Arquitectura de la API SMS/MMS

La API SMS/MMS es una herramienta para el desarrollo de aplicaciones en dispositivos móviles. Los componentes y tecnologías sobre las cuales esta basada su arquitectura son las siguientes:

J2ME. Es el conjunto de tecnologías y especificaciones utilizadas para desarrollar la API. Permite la construcción de programas bajo la plataforma Java para dispositivos móviles.

Mensajería SMS/MMS. SMS es el servicio de mensajes de texto mediante el cual se enviará y recibirá información para la ubicación del usuario así como de los servicios que éste solicite. MMS es el servicio de mensajes multimedia a través del cual se realizará el envío de los mapas.

HTTP. Es un protocolo orientado a transacciones Web que sigue el esquema petición/respuesta entre un cliente y un servidor. Permitirá solicitar un mapa a un servidor específico a través de una conexión a Internet desde el dispositivo móvil.

Red de telefonía móvil. Es el sistema de estaciones transmisoras-receptoras de radio y centrales telefónicas de conmutación mediante el cual es posible transmitir información desde un dispositivo móvil por medio de servicios como: SMS, MMS, Internet, entre otros.

GPS. Es el dispositivo (Bluetooth o interno) del cual se obtendrá información de posicionamiento para determinar la ubicación del dispositivo móvil.

Gateway. El gateway tiene la tarea de encaminar los mensajes SMS/MMS a un servidor específico para procesar las consultas y respuestas de los usuarios. Para realizar esto, el gateway debe intercambiar información entre la red de comunicación e Internet.

Servidor de mapas y bases de datos geoespaciales. El servidor de mapas proporcionará la información georeferencial así como las vistas de las peticiones que reciba.

Page 39: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

26

La arquitectura de la API desarrollada en este trabajo de tesis se muestra dentro de un contexto cliente/servidor en la figura 3.2, en donde los métodos y tecnologías que proporciona la API, permite a las aplicaciones LBS ofrecer servicios de localización y búsqueda de sitios de interés. Para esto, es necesario que exista una parte servidora dedicada a resolver las consultas y peticiones que llegan a través de la aplicación. La API SMS/MMS se encuentra en la parte cliente.

El usuario, a través de una aplicación instalada en su dispositivo móvil que implemente la API SMS/MMS, envía su consulta en un mensaje SMS o por Internet a través del protocolo HTTP. La información se trasporta por medio de la red de telefonía móvil hasta el gateway, quien interactúa con la red de Internet para dirigirla a un servidor de mapas y consultas espaciales que resuelva la petición solicitada y genere la respuesta (textual o en un mapa) que será enviada al usuario vía SMS, MMS o HTTP, según sea el caso. El proceso que se sigue para enviar la respuesta al usuario es inverso al descrito anteriormente, es decir, el servidor de mapas y consultas espaciales interactúa con la red de Internet para comunicarse con el Gateway, éste transmite la información por medio de la red de telefonía móvil hasta el dispositivo que realizó la petición a través la aplicación.

3.2.2 Limitaciones de los dispositivos móviles

De acuerdo a la investigación realizada en [Rosenbaum], las propiedades de los dispositivos móviles cambian rápidamente. Sin embargo, aún presentan algunas limitaciones en el tamaño de la pantalla, resolución y capacidad de procesamiento. Algunas otras han

Figura 3.2 Arquitectura de la API SMS/MMS en un contexto cliente/servidor.

Page 40: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

27

disminuido, como por ejemplo el espacio de almacenamiento. Enseguida se explica de manera más amplia estas limitaciones: Tamaño de la pantalla. Los tamaños de las pantallas relativamente pequeños son una de las mayores desventajas de los dispositivos móviles si se usan para presentar imágenes raster o vectoriales. El tamaño de los dispositivos actuales varía dependiendo de la intención de uso. En cualquier caso, el espacio disponible para presentar imágenes es limitado (ver figura 3.3).

Resolución de pantalla. Relacionado con el tamaño de la pantalla, las resoluciones de los dispositivos móviles son bajas y esto afecta la manipulación y la calidad de presentación de la imagen. Si una imagen raster toma una porción grande de la pantalla en un dispositivo de baja resolución, la información que se puede visualizar es menor. Capacidad de procesamiento. La manipulación de las imágenes, independientemente de su tipo, es afectada si existe carencia de capacidad de procesamiento. Debido al tamaño de los dispositivos móviles, no es posible incluir hardware con rendimiento similar al de las computadoras de escritorio. Entre otras cosas, ocurre por el suministro de energía y arquitectura básica. Espacio de almacenamiento. Los dispositivos móviles están limitados en espacio de almacenamiento temporal y permanente. La necesidad de memoria temporal depende principalmente del procesamiento de datos de la imagen. Combinan ambas memorias en una y comparten los recursos. Con esto, los dispositivos actuales permiten una memoria temporal superior a los 64MB.

En la Tabla 3.1 se muestran algunas características de distintos modelos de dispositivos móviles.

Tabla 3.1 Especificación técnica de algunos dispositivos móviles.

Dispositivo Resolución (pixeles)

Colores Almacenamiento S.O Java

Motorola V3m RAZR 176 x 220 16 bits (65.000)

30 MB --------------- -----

LG KG800 Chocolate 176 x 220 18 bits (262.000)

128 MB ---------------

Samsung SGH-E576 176 x 220 65.000 24 MB + MicroSD ---------------

Sony E. P990i 240 x 320 18 bits (262.144)

60 MB + MS 64 MB Symbian 9.1

BlackBerry Curve 8310 240 x 320 65.536 64 MB BlackBerry

Figura 3.3 Diversidad de tamaños de pantallas en dispositivos móviles.

Page 41: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

28

HP Ipaq HX4700 480 x 640 16 bits

(64.000)

Windows Mobile 2003 SE

Nokia 9300i 640 x 200 16 bits (65.536)

80 MB Symbian OS 7.0

Blackberry 8700g Wireless Handheld

320 x 240 16 bits (65.536)

64 MB Blackberry

La presentación de imágenes grandes en dispositivos móviles provoca problemas debido a sus capacidades limitadas.

Una imagen, independientemente si es raster o vectorial, se caracteriza por los siguientes puntos:

Tamaño de la imagen: dimensiones de la representación de la imagen.

Tamaño del archivo que contiene la imagen.

Formato del archivo: descripción del contenido de la imagen.

Precisión: detalles y colores.

Las principales propiedades de un dispositivo móvil con respecto a la manipulación y visualización de la imagen son:

Resolución de la pantalla: el área visible de la pantalla.

Propiedades de la pantalla: la posible precisión.

Computacional: capacidad de procesamiento y memoria.

Basado en lo anterior, algunas situaciones críticas que pueden ocurrir si hay grandes diferencias entre la imagen y las características relacionadas al dispositivo son:

1. El tamaño de la imagen es más grande que la resolución de la pantalla, es decir, la imagen supera el tamaño de la pantalla y esto dificulta su completa visualización.

2. La imagen no se puede cargar en la memoria temporal debido a la baja capacidad de computación del dispositivo móvil y el tamaño y formato del archivo.

3. La presentación de la imagen en el dispositivo, debido a la precisión, no expresa su contenido original.

Las limitaciones derivadas del uso de imágenes de mapas en el dispositivo móvil imponen una serie de restricciones que se deben considerar.

Los problemas que pueden ocurrir mientras se visualiza una imagen grande en una pantalla pequeña se pueden reducir si la imagen se visualiza usando una técnica de presentación apropiada como:

Paneo: explorar diferentes partes de la imagen.

Zoom: obtener más o menos detalles de vistas de la imagen.

Técnicas hibridas: una combinación de ambas.

Los problemas que ocurren mientras se carga una imagen grande dependen de las habilidades de computación del dispositivo, relacionado principalmente con el tamaño del archivo y el formato. Mientras el tamaño del archivo se encuentra influenciado por la disponibilidad de memoria temporal, la utilidad de un formato de archivo depende en general de las propiedades de computación del dispositivo.

Page 42: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

29

3.2.3 Casos de uso de la API SMS/MMS

El diseño de la API se basó en los diagramas de caso de uso particulares y los diagramas de actividades que aquí se presentan. Los casos de uso se especificaron a partir de cada una de las funciones descritas previamente en la sección 3.1.2.2.

3.2.3.1 Caso de uso general

Como se ha mencionado, la API SMS/MMS permite crear aplicaciones LBS y por lo tanto se encuentra digida a programadores. Sin embargo, es la aplicación quien implementa de manera directa los diversos métodos que ofrece la API. Por esta razón, se consideró como actor de los casos de uso a la aplicación LBS. En la figura 3.4 se muestra el caso de uso general de la API.

3.2.3.2 Caso de uso: Solicitar mapa

La figura 3.5 muestra el caso de uso Solicitar mapa. En este caso se describen los pasos a seguir para formar una trama de consulta para solicitar un mapa.

Figura 3.4 Diagrama de caso de uso general de la API SMS/MMS.

uc apisms/mms

Aplicación LBS

CU-2 Recibir

mensaje MMS

CU-3 Procesar

imagenes SVG

CU-4 Representar

puntos de interés

CU-8 Visualizar e

interactuar con el

mapa

CU-5 Trazar

camino

CU-6 Obtener datos

de localización

CU-7 Abrir

conexión HTTP

CU-1 Solicitar

mapa

Page 43: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

30

Figura 3.5 Diagrama de caso de uso: CU-1 Solicitar mapa.

Tabla 3.2 Descripción del caso de uso: CU-1 Solicitar mapa.

ID: CU-1 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.6.

Nombre: Solicitar mapa.

Actores: Aplicación LBS.

Descripción: Permite solicitar un mapa por medio de un dato que se agregará a la trama del mensaje SMS de consulta de la API SMS.

Precondiciones: 1. Los datos para formar la trama de consulta se deben obtener por medio de una aplicación instalada en el dispositivo móvil del usuario.

Poscondiciones: 1. Se formará una trama de consulta para enviar en un mensaje SMS.

Escenario de éxito: 1. Obtener datos para formar la trama de consulta. 2. Agregar en el campo Datos de la trama del mensaje el dato que indica si el usuario

solicita o no un mapa. 3. Formar trama de acuerdo al tipo de consulta. 4. Terminar proceso.

Escenario de fracaso 1:

1. Obtener datos para formar la trama de consulta. 2. Agregar en el campo Datos de la trama del mensaje el dato que indica si el usuario

solicita o no un mapa. 3. Formar trama de acuerdo al tipo de consulta. 4. Ocurre un error debido a que uno o más valores asignados para formar la trama no son

válidos. 5. Lanzar una excepción. 6. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

uc solicitar mapa

Aplicación LBS

CU-1 Solicitar mapa

act CU-1 solicitar mapa

InicioObtener datos para

formar trama de

consulta

¿Los valores para

formar la trama

son correctos?

Lanzar excepción No

Agregar en el campo Datos de la

trama el dato que indica si se

solicita o no un mapa

Formar trama de

acuerdo al tipo de

consulta

Fin

Figura 3.6 Diagrama de actividad del caso de uso: CU-1 Solicitar mapa.

Page 44: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

31

3.2.3.3 Caso de uso: Recibir mensaje MMS

La figura 3.7 muestra el caso de uso Recibir mensaje MMS. Este caso de uso describe la recepción de un mensaje MMS que contiene un mapa SVG por una aplicación instalada en el dispositivo móvil.

Tabla 3.3 Descripción del caso de uso: CU-2 Recibir mensaje MMS.

ID: CU-2 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.8.

Nombre: Recibir mensaje MMS.

Actores: Aplicación LBS.

Descripción: Permite que una aplicación reciba un mensaje MMS con la imagen de un mapa SVG como contenido adjunto.

Precondiciones: 1. El dispositivo móvil tiene la capacidad de recibir mensajes MMS. 2. El dispositivo móvil tiene configurado el servicio GPRS para mensajes MMS.

Poscondiciones: 1. La aplicación recibirá un mensaje MMS para procesar el contenido y mostrarlo.

Escenario de éxito: 1. Ejecutar la aplicación para abrir la conexión y esperar mensajes MMS en un puerto específico.

2. Recibir MMS. 3. Cargar y mostrar el mapa SVG. 4. Terminar proceso.

Escenario de fracaso 1:

1. Ejecutar la aplicación para abrir la conexión y esperar mensajes MMS en un puerto específico.

2. Ocurre un error al abrir la conexión ocasionado por proporcionar parámetros incorrectos o la aplicación no tiene permiso para realizar dicha operación.

3. Lanzar una excepción. 4. Terminar proceso.

Escenario de fracaso 2:

1. Ejecutar la aplicación para abrir la conexión y esperar mensajes MMS en un puerto específico.

2. Recibir MMS. 3. Ocurre un error al recibir el mensaje, el dispositivo móvil no soporta el formato para

gráficos SVG. 4. Lanzar una excepción. 5. Terminar proceso.

Escenario de fracaso 3:

1. Ejecutar la aplicación para abrir la conexión y esperar mensajes MMS en un puerto específico.

2. Recibir MMS. 3. Cargar y mostrar el mapa SVG. 4. El código SVG que describe la imagen no cumple con el perfil Tiny o su sintáxis es

incorrecta y genera un error al procesar la imagen para su visualización. 5. Lanzar una excepción.

Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

uc recibir mensaje mms

Aplicación LBS

CU-2 Recibir

mensaje MMS

Figura 3.7 Diagrama de caso de uso: CU-2 Recibir mensaje MMS.

Page 45: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

32

Figura 3.8 Diagrama de actividad del caso de uso: CU-2 Recibir mensaje MMS.

3.2.3.4 Caso de uso: Procesar imágenes SVG

La Figura 3.9 muestra el caso de uso Procesar imágenes SVG.

Tabla 3.4 Descripción del caso de uso: CU-3 Procesar imágenes SVG.

ID: CU-3 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.10.

Nombre: Procesar imágenes SVG.

Actores: Aplicación LBS.

Descripción: Permite procesar un mensaje MMS que contiene un mapa SVG para cargarlo y visualizarlo en el dispositivo móvil.

Precondiciones: 1. El dispositivo móvil soporta el formato de imágenes SVG Tiny.

Poscondiciones: 1. La aplicación será capaz de mostrar correctamente el mapa y la información que contiene en la pantalla del dispositivo móvil.

Escenario de éxito: 1. Obtener la imagen SVG a cargar en el dispositivo. 2. Cargar la imagen y mostrarla a través de la pantalla del dispositivo móvil. 3. Terminar proceso.

Escenario de fracaso 1:

1. Obtener la imagen SVG a cargar en el dispositivo. 2. Ocurre un error al obtener el recurso, la ruta o nombre de la imagen es incorrecta. 3. Lanzar una excepción. 4. Terminar proceso.

Escenario de fracaso 2:

1. Obtener la imagen SVG a cargar en el dispositivo. 2. Cargar la imagen y mostrarla a través de la pantalla del dispositivo móvil. 3. Ocurre un error al cargar la imagen, ésta no con cumple con el perfil SVG Tiny o el

código que la representa tiene algún error de sintáxis. 4. Lanzar una excepción. 5. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

act CU-2 recibir mms

Inicio

Ejecutar aplicación para

abrir conexion y esperar

mensajes MMS

¿Fué posible abrir la

conexión para mensajes?

Recibir MMSSi

¿El mensaje se recibió

correctamente en el

dispositivo móvil?

Fin

Lanzar excepción

No No

Si Cargar y mostrar

contenido del

mensaje

¿La imagen SVG es

correcta y se puede

visualizar?

Si

No

uc procesar imágenes SVG

Aplicación LBS

CU-3 Procesar

imágenes SVG

Figura 3.9 Diagrama de caso de uso: CU-3 Procesar imágenes SVG.

Page 46: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

33

3.2.3.5 Caso de uso: Representar puntos de interés

La figura 3.11 muestra el caso de uso CU-4 Representar puntos de interés. Describe los pasos necesarios para agregar elementos a la imagen de un mapa para representar puntos de interés.

Tabla 3.5 Descripción del caso de uso: CU-4 Representar puntos de interés.

ID: CU-4 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.12.

Nombre: Representar puntos de interés.

Actores: Aplicación LBS.

Descripción: Permite agregar nuevos elementos a la imagen de un mapa SVG para representar puntos de interés.

Precondiciones: 1. Se tiene un mapa SVG cargado en el dispositivo móvil. 2. Se tiene definida la información necesaria para dibujar los puntos en el mapa.

Poscondiciones: 1. Se agregarán los puntos de interés en el mapa de acuerdo a la información proporcionada.

Escenario de éxito: 1. Leer datos para dibujar un punto: coordenadas y texto. 2. Validar que las coordenadas estén dentro del rango que delimita el tamaño de la

imagen. 3. Obtener documento de la imagen SVG para acceder a su estructura y modificarla. 4. Crear y agregar los puntos de interés a la imagen. 5. Mostrar el mapa con los nuevos elementos. 6. Terminar proceso.

Escenario de fracaso 1:

1. Leer datos para dibujar un punto: coordenadas y texto. 2. Validar que las coordenadas estén dentro del rango que delimita el tamaño de la

imagen. 3. Las coordenadas no son válidas, no corresponden a un punto dentro de la imagen.

act CU-3 Procesar imágenes SVG

Inicio

Obtener imagen SVG

¿La ruta o el nombre del

recurso a obtener es correcto?

Cargar la imagen a

mostrar en el dispositiv o

móv il

Si

Lanzar excepción

No

¿La imagen a cargar

en el dispositivo móvil

es SVG Tiny y es

posible visualizarla?

Fin

Si

No

Figura 3.10 Diagrama de actividad del caso de uso: CU-3 Procesar imágenes SVG.

Figura 3.11 Diagrama de caso de uso: CU-4 Representar puntos de interés.

uc representar poi

Aplicación LBS

CU-4 Representar

puntos de interés

Page 47: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

34

4. Imprimir mensaje de error. 5. Terminar proceso.

Escenario de fracaso 2:

1. Leer datos para dibujar un punto: coordenadas y texto. 2. Validar que las coordenadas estén dentro del rango que delimita el tamaño de la

imagen. 3. Obtener documento de la imagen SVG para acceder a su estructura y modificarla. 4. Ocurre un error al obtener el documento de la imagen, la aplicación no tiene los

privilegios necesarios para acceder al contenido SVG. 5. Lanzar una excepción. 6. Terminar proceso.

Escenario de fracaso 3:

1. Leer datos para dibujar un punto: coordenadas y texto. 2. Validar que las coordenadas estén dentro del rango que delimita el tamaño de la

imagen. 3. Obtener documento de la imagen SVG para acceder a su estructura y modificarla. 4. Crear y agregar los puntos de interés a la imagen. 5. Ocurre un error al crear los nuevos elementos para la imagen, los parámetros

proporcionados no son correctos. 6. Lanzar una excepción. 7. Terminar proceso.

Escenario de fracaso 4:

1. Leer datos para dibujar un punto: coordenadas y texto. 2. Validar que las coordenadas estén dentro del rango que delimita el tamaño de la

imagen. 3. Obtener documento de la imagen SVG para acceder a su estructura y modificarla. 4. Crear y agregar los puntos de interés a la imagen. 5. Mostrar el mapa con los nuevos elementos. 6. Ocurre un error al recargar el mapa, la aplicación puede no responder si los recursos

requeridos para procesar y representar nuevamente la imagen son insuficientes. 7. Finalizar la ejecución de la aplicación.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería donde se encuentra la API.

act CU-4 Representar puntos de interés

InicioLeer datos para dibujar

punto: coordenadas y

texto

Validar

coordenadas

¿Las coordenas hacen

referencia a un punto

dentro de la imagen?

Obtener documento

de la imagen SVGSi

Lanzar excepción

No

¿La aplicación tiene los

permisos necesarios para

obtener el documento SVG?

Crear y agregar los

puntos de interés a

la imagen

Si

No

¿Los parametros que

definen los nuevos

elementos son correctos?

Mostrar mapa con los

nuev os elementos

Si

¿La aplicación tuvo los

recursos necesarios para

procesar y cargar

nuevamente la imagen?

Fin

Si

No

No

Imprimir

mensaje de error

Finalizar la ejecución

de la aplicación

Figura 3.12 Diagrama de actividad del caso de uso: CU-4 Representar puntos de interés.

Page 48: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

35

3.2.3.6 Caso de uso: Trazar camino

En este caso de uso (figura 3.13) se describe la manera en que se trazará un camino en el mapa a partir de una cadena que defina las coordenadas para cada uno de los puntos a representar.

Tabla 3.6 Descripción del caso de uso: CU-5 Trazar camino.

ID: CU-5 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.14.

Nombre: Trazar camino.

Actores: Aplicación LBS.

Descripción: Permite trazar un camino en un mapa a partir de una cadena que define el conjunto de coordenadas de los puntos y líneas a trazar.

Precondiciones: 1. La aplicación debe cargar correctamente el mapa en el dispositivo móvil. 2. Se conocen las coordenadas para cada uno de los puntos del camino a trazar.

Poscondiciones: 1. El usuario podrá visualizar un camino en el mapa que le permitirá conocer la manera de llegar a un lugar desde un punto determinado.

Escenario de éxito: 1. Leer la cadena que contiene las coordenadas de los puntos. 2. Validar que la cadena se encuentre formada por pares ordenados (x,y) que permitan

representar los puntos. 3. Agregar elementos a la imagen. 4. Visualizar camino en el mapa. 5. Terminar proceso.

Escenario de fracaso 1:

1. Leer la cadena que contiene las coordenadas de los puntos. 2. Validar que la cadena se encuentre formada por pares ordenados (x,y) que permitan

representar los puntos. 3. Ocurre un error al validar los datos, la cadena no contiene pares ordenados correctos. 4. Lanzar una excepción. 5. Terminar proceso.

Escenario de fracaso 2:

1. Leer la cadena que contiene las coordenadas de los puntos. 2. Validar que la cadena se encuentre formada por pares ordenados (x,y) que permitan

representar los puntos. 3. Agregar elementos a la imagen. 4. Ocurre un error al agregar los elementos a la imagen, las coordenadas no hacen

referencia a un punto dentro de la imagen. 5. Lanzar una excepción. 6. Terminar proceso.

Escenario de fracaso 3:

1. Leer la cadena que contiene las coordenadas de los puntos. 2. Validar que la cadena se encuentre formada por pares ordenados (x,y) que permitan

representar los puntos. 3. Agregar elementos a la imagen. 4. Visualizar camino en el mapa. 5. Error al mostrar el mapa con el camino trazado, la aplicación puede no responder si los

recursos requeridos para procesar y representar nuevamente la imagen son insuficientes.

6. Finalizar la ejecución de la aplicación.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

uc trazar camino

Aplicación LBS

CU-5 Trazar camino

Figura 3.13 Diagrama de caso de uso: CU-5 Trazar camino.

Page 49: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

36

Figura 3.14 Diagrama de actividad del caso de uso: CU-5 Trazar camino.

3.2.3.7 Caso de uso: Obtener datos de localización

El caso de uso de la figura 3.15 representa la forma de obtener los datos de localización (latitud, longitud, altitud) de un usuario a partir de información que se obtiene del dispositivo móvil.

Tabla 3.7 Descripción del caso de uso: CU-6 Obtener datos de localización.

ID: CU-6 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.16.

Nombre: Obtener datos de localización.

Actores: Aplicación LBS.

Descripción: Permitirá obtener datos de localización de un usuario a partir de información que se obtenga de su dispositivo móvil.

Precondiciones: 1. El dispositivo móvil cuenta con GPS interno o una tarjeta SIM (Subscriber Identify Module por sus siglas en inglés) válida para alguna operadora telefónica.

2. Si se cuenta con GPS se deberá activar. 3. Por medio de la aplicación se define un criterio de búsqueda: por GPS interno o por

medio de la infraestructura de la operadora telefónica del dispositivo móvil.

Poscondiciones: 1. El usuario podrá utilizar su dispositivo móvil para obtener su ubicación geográfica en

act CU-5 trazar camino

InicioLeer cadena de

puntosValidar cadena

¿La cadena está

formada por pares

ordenados?

Agregar elementos a

la imagen

¿Las coordenadas hacen

referencia a un punto

dentro de la imagen?

Fin

Si

Lanzar excepción

No

No

Visualizar camino

en el mapa

¿La aplicación obtuvo los

recursos necesarios para

procesar y mostrar

nuevamente la imagen?

Si

No

Finalizar ejecución

de la aplicación

uc obtener datos de localización

Aplicación LBS

CU-6 Obtener datos

de localización

Figura 3.15 Diagrama de caso de uso: CU-6 Obtener datos de localización.

Page 50: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

37

términos de latitud, longitud y altitud a través de una aplicación LBS.

Escenario de éxito: 1. Obtener criterio de localización. 2. Buscar proveedor de localización. 3. Obtener datos de localización: latitud, longitud, altitud. 4. Terminar proceso.

Escenario de fracaso 1:

1. Obtener criterio de localización. 2. Buscar proveedor de localización. 3. No se encuentra ningún proveedor de localización. 4. Imprimir un mensaje. 5. Terminar proceso.

Escenario de fracaso 2:

1. Obtener criterio de localización. 2. Buscar proveedor de localización. 3. Obtener datos de localización: latitud, longitud, altitud. 4. Ocurre un error al obtener datos. El tiempo de espera para recibir los datos expira o la

aplicación no tiene permiso para acceder a la información de localización. 5. Lanzar excepción. 6. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

.

3.2.3.8 Caso de uso: Conexión HTTP

El caso de uso de la figura 3.17 representa la conexión a Internet por medio del protocolo HTTP en el dispositivo móvil. Permite a una aplicación LBS enviar una solicitud a un servidor específico para recibir un mapa con información georeferenciada.

Figura 3.17 Diagrama de caso de uso: CU-7 Conexión HTTP.

uc conexión HTTP

Aplicación LBS

CU-7 Conexión HTTP

Figura 3.16 Diagrama de actividad del caso de uso: CU-6 Obtener datos de localización.

act CU-6 obtener datos de localización

Inicio

Obtener criterio de

localizaciónBuscar prov eedor

de localización

Se encontró

proveedor

Imprimir mensaje

No

Obtener datos:

latitud, longitud,

altitud

¿Los datos se recibiron y la

aplicación tuvo acceso a éstos?

No

Fin

Lanzar excepción

Page 51: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

38

Tabla 3.8 Descripción del caso de uso: CU-7 Conexión HTTP.

ID: CU-7 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.18.

Nombre: Conexión HTTP.

Actores: Aplicación LBS.

Descripción: Permitirá abrir una conexión HTTP para enviar una petición a un servidor específico y recibir un mapa en el dispositivo móvil.

Precondiciones: 1. El dispositivo móvil deberá tener configurado y activado el servicio GPRS o alguna red inalámbrica con conexión a Internet.

2. Por medio de la aplicación se definirá la URL con la cual se establecerá conexión.

Poscondiciones: 1. La aplicación LBS podrá conectarse a Internet para solicitar información georeferenciada en un mapa.

Escenario de éxito: 1. Obtener la URL con los parámetros necesarios que definan la información a solicitar al servidor.

2. Abrir conexión HTTP a la URL especificada enviando una petición GET para obtener el mapa.

3. Recibir datos del servidor y mostrarlos. 4. Cerrar conexión. 5. Terminar proceso.

Escenario de fracaso 1:

1. Obtener la URL con los parámetros necesarios que definan la información a solicitar al servidor.

2. Abrir conexión HTTP a la URL especificada enviando una petición GET para obtener el mapa.

3. Error en la conexión, el destino no se encuentra o la URL no es correcta. 4. Lanzar una excepción. 5. Terminar proceso.

Escenario de fracaso 2:

1. Obtener la URL con los parámetros necesarios que definan la información a solicitar al servidor.

2. Abrir conexión HTTP a la URL especificada enviando una petición GET para obtener el mapa.

3. Recibir datos del servidor. 4. Ocurre un error, se interrumpe inesperadamente la conexión con el servidor. 5. Lanzar una excepción. 6. Terminar proceso.

Escenario de fracaso 3:

1. Obtener la URL con los parámetros necesarios que definan la información a solicitar al servidor.

2. Abrir conexión HTTP a la URL especificada enviando una petición GET para obtener el mapa.

3. Recibir datos del servidor. 4. Cerrar conexión. 5. Error al cerrar la conexión. 6. Lanzar excepción. 7. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

Page 52: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

39

Figura 3.18 Diagrama de actividad del caso de uso: CU-7 Conexión HTTP.

3.2.3.9 Caso de uso: Visualizar e interactuar con el mapa

La figura 3.19 muestra el caso de uso CU-8 Visualizar e interactuar con el mapa. Describe las funciones básicas que permitirán al usuario interactuar con el mapa en su dispositivo móvil.

Figura 3.19 Diagrama de caso de uso: CU-8 Visualizar e interactuar con el mapa.

Tabla 3.9 Descripción del caso de uso: CU-8 Visualizar e interactuar con el mapa.

ID: CU-8 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.20.

Nombre: Visualizar e interactuar con el mapa.

Actores: Aplicación LBS.

Descripción: Permitirá al usuario interactuar con el mapa a través de su dispositivo móvil.

Precondiciones: 1. La aplicación debe cargar correctamente un mapa SVG en el dispositivo móvil. 2. El mapa se visualiza correctamente.

Poscondiciones: 1. El usuario podrá visualizar e interactuar con el mapa a través de las teclas del dispositivo móvil y menús de opciones.

Escenario de éxito: 1. Seleccionar alguna forma de interacción con el mapa: zoom-in, zoom-out, paneo y vista original.

2. Aplicar operación a la imagen.

uc v isualizar e interactuar con el mapa

Aplicación LBS

CU-8 Visualizar e

interactuar con el

mapa

CU-8.4 Vista

original

CU-8..1 Zoom in

CU-8.2 Zoom out

CU-8.3 Paneo

«extend»

«extend»

«extend»

«extend»

act CU-7 conexión HTTP

Inicio

Obtener URL Sí

Lanzar excepción

No

Recibir datos del

serv idor y

mostrarlos

La conexion

se cierra

correctamente

No

Fin

Abrir conexion

HTTP por medio

del método GET

¿Fue posible abrir

la conexión?

¿Ocurrió algún error

duante la conexión?

Si

No

Cerrar

conexion

Page 53: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

40

3. Mostrar imagen. 4. Terminar proceso.

Escenario de fracaso 1:

1. Seleccionar alguna forma de interacción con el mapa: zoom-in, zoom-out, paneo y vista original.

2. Aplicar operación a la imagen. 3. Ocurre un error al realizar la operación, la aplicación no tiene los privilegios necesarios

para modificar la imagen SVG. 4. Lanzar una excepción. 5. Terminar proceso.

Escenario de fracaso 2:

1. Seleccionar alguna forma de interacción con el mapa: zoom-in, zoom-out, paneo y vista original.

2. Aplicar operación a la imagen. 3. Mostrar imagen. 4. Ocurre un error, la aplicación no obtiene los recursos necesarios para procesar y mostrar

la imagen resultante. 5. Lanzar una excepción. 6. Terminar proceso.

Incluye: CU-8.1 Zoom-in, CU-8.2 Zoom-out, CU-8.3 Paneo, CU-8.4 Vista original.

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

Tabla 3.10 Descripción del caso de uso: CU-8.1 Zoom-in.

ID: CU-8.1 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.21.

Nombre: Zoom-in.

Actores: Aplicación LBS.

Descripción: Permite al usuario realizar un acercamiento a la imagen del mapa.

Precondiciones: 1. La aplicación debe cargar correctamente la imagen del mapa en el dispositivo móvil. 2. El mapa se visualiza correctamente.

Poscondiciones: 1. El usuario podrá realizar un acercamiento a una zona del mapa.

Escenario de éxito: 1. Seleccionar la opción zoom-in. 2. Aplicar operación a la imagen del mapa. 3. Visualizar resultado. 4. Terminar proceso.

Escenario de fracaso 1:

1. Seleccionar la opción zoom-in. 2. Aplicar operación a la imagen del mapa. 3. Ocurre un error durante la operación, la aplicación no tiene los privilegios necesarios

para modificar la imagen SVG.

Figura 3.20 Diagrama de actividad del caso de uso: CU-8 Visualizar e interactuar con el mapa.

act CU-8 v isualizar e interactuar con el mapa

Inicio

Seleccionar opción

de interacción

¿La aplicación tiene los

privilegios necesarios para

modificar la imagen?

Fin

Si

Lanzar excepciónNo

Aplicar operación a

la imagenMostrar imagen

La aplicación pudo

procesar y mostrar

nuevamente la imagen

No

Si

Page 54: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

41

4. Lanzar una excepción. 5. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

Tabla 3.11 Descripción del caso de uso: CU-8.2 Zoom-out.

ID: CU-8.2 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.22.

Nombre: Zoom-out.

Actores: Aplicación LBS.

Descripción: Permite al usuario realizar un alejamiento a la imagen del mapa.

Precondiciones: 1. La aplicación debe cargar correctamente la imagen del mapa en el dispositivo móvil. 2. El mapa se visualiza correctamente.

Poscondiciones: 1. El usuario podrá realizar un alejamiento a una zona del mapa.

Escenario de éxito: 1. Seleccionar la opción zoom-out. 2. Aplicar operación a la imagen del mapa. 3. Visualizar resultado. 4. Terminar proceso.

Escenario de fracaso 1:

1. Seleccionar la opción zoom-out. 2. Aplicar operación a la imagen del mapa. 3. Ocurre un error durante la operación, la aplicación no tiene los privilegios necesarios

para modificar la imagen SVG. 4. Lanzar una excepción. 5. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

Figura 3.21 Diagrama de actividad del caso de uso: CU-8.1 Zoom-in.

act CU-8.1 zoom-in

Inicio

Seleccionar opción:

zoom-inVisualizar

resultado

Fin

Si

Lanzar excepción

No

Aplicar operación a la

imagen del mapa

¿La aplicación tiene los

privilegios para modificar

la imagen?

Page 55: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

42

Tabla 3.12 Descripción del caso de uso: CU-8.3 Paneo.

ID: CU-8.3 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.23.

Nombre: Paneo.

Actores: Aplicación LBS.

Descripción: Permite al usuario mover la imagen del mapa a través de la pantalla del dispositivo.

Precondiciones: 1. La aplicación debe cargar correctamente la imagen del mapa en el dispositivo móvil. 2. El mapa se visualiza correctamente.

Poscondiciones: 1. El usuario podrá explorar todo el mapa a través de la pantalla.

Escenario de éxito: 1. Seleccionar la opción paneo. 2. Aplicar operación a la imagen del mapa. 3. Visualizar resultado. 4. Terminar proceso.

Escenario de fracaso 1:

1. Seleccionar la opción paneo. 2. Aplicar operación a la imagen del mapa. 3. Ocurre un error durante la operación, la aplicación no tiene los privilegios necesarios

para modificar la imagen SVG. 4. Lanzar una excepción. 5. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería donde se encuentra la API.

act CU-8.3 paneo

Inicio

Seleccionar opción:

paneo

Aplicar operación a

la imagen del mapa

La aplicación tiene los privilegios

para modificar la imagen

Fin

Lanzar excepcion

Si

No

Visualizar

resultado

Figura 3.22 Diagrama de actividad del caso de uso: CU-8.2 Zoom-out.

Figura 3.23 Diagrama de actividad del caso de uso: CU-8.3 Paneo.

act CU-8.2 zoom-out

Inicio

Seleccionar opción:

zoom-outAplicar operación a la

imagen del mapa

La aplicación tiene los

privilegios para

modificar la imagen

Fin

Si

Lanzar excepcion

No

Visualizar

resultado

Page 56: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

43

Tabla 3.13 Descripción del caso de uso: CU-8.4 Vista original.

ID: CU-8.4 El diagrama de actividades que incluye el escenario de éxito y los escenarios de fracaso se muestra en la figura 3.24.

Nombre: Vista original.

Actores: Aplicación LBS.

Descripción: Permitirá al usuario establecer la imagen del mapa a su tamaño normal.

Precondiciones: 1. La aplicación debe cargar correctamente la imagen del mapa en el dispositivo móvil. 2. El mapa se visualiza correctamente.

Poscondiciones: 1. El usuario podrá restablecer la imagen del mapa a su tamaño normal.

Escenario de éxito: 1. Seleccionar la opción vista original. 2. Aplicar operación a la imagen del mapa. 3. Visualizar resultado. 4. Terminar proceso.

Escenario de fracaso 1:

1. Seleccionar la opción vista original. 2. Aplicar operación a la imagen del mapa. 3. Ocurre un error durante la operación, la aplicación no tiene los privilegios necesarios

para modificar la imagen SVG. 4. Lanzar una excepción. 5. Terminar proceso.

Incluye:

Suposiciones: Se supone que la aplicación LBS importa la librería de la API.

3.3 Diseño

Las funciones que se especificaron en la fase de análisis se tomaron como punto de partida para definir y diseñar los siguientes paquetes (ver figura 3.25):

1. mx.edu.cenidet.apismsmms.conexionhttp. 2. mx.edu.cenidet.apismsmms.conexionmms. 3. mx.edu.cenidet.apismsmms.localizacionmovil. 4. mx.edu.cenidet.apismsmms.mapasvg.

Los paquetes conexionmms, localizacionmovil y mapasvg hacen uso de APIs para J2ME las cuales se especifican más adelante en su descripción particular. Las APIs utilizadas se encuentran definidas por el Proceso de la Comunidad Java (JCP) en su correspondiente JSR.

act CU-8.4 Vista original

Si

No

Inicio

Seleccionar opción:

v ista original

Aplicar operación a la

imagen del mapa

La aplicación tiene los

privilegios para

modificar la imagen

Fin

Lanzar excepción

Visualizar

resultado

Figura 3.24 Diagrama de actividad del caso de uso: CU-8.1 Vista panorámica.

Page 57: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

44

Figura 3.25 Diagrama general de paquetes diseñados para la API SMS/MMS.

Además, se modificaron dos clases de la API SMS desarrollada en [Ruiz07]: 1. Poi.java del paquete mx.edu.cenidet.apisms.dato. Este paquete contiene clases que

representan los datos que pueden formar un mensaje de consulta o respuesta. La clase Poi representa un punto de interés y se le agregó lo siguiente: o Atributo mapa. Es de tipo booleano, su valor inicial es false e indica que no se

solicitará un mapa, en caso contrario se deberá establecer a true. o Método EscribeMapa(boolean). El parámetro que recibe es de tipo booleano y

representa el valor (true o false) que se asignará al atributo mapa. o Método LeeMapa().Retorna true o false según el valor asignado al atributo mapa

mediante el método EscribeMapa(boolean). El diagrama de la clase Poi se muestra en la figura 3.26.

class dato

Poi

- clasificacion: String

- distancia: String

- mapa: boolean

- nombre: String

- otro: String

+ EscibeClasif(String) : void

+ EscibeNombre(String) : void

+ EscribeDistancia(String) : void

+ EscribeMapa(boolean) : void

+ EscribeOtro(String) : void

+ LeeClasif() : String

+ LeeDistancia() : String

+ LeeMapa() : boolean

+ LeeNombre() : String

+ LeeOtro() : String

+ Poi()

Se agregó el atributo mapa y las operaciones EscribeMapa(boolean) y LeeMapa() a la clase Poi.

Figura 3.26 Diagrama de la clase Poi.java.

Page 58: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

45

2. Mensaje.java del paquete mx.edu.cenidet.apisms.trama. Las clases que contiene este

paquete permiten definir los datos de la trama de consulta que se enviará al servidor. La clase Mensaje representa el mensaje SMS a enviar para solicitar una consulta. Si en la clase Poi el valor del atributo mapa se establece a true, el dato a agregar a la trama del mensaje será un 1 y 0 en caso contrario. Los tipos de tramas que incluyen el dato para solicitar mapa son: o Q_GEO_UBICACION. o Q_CAMINO_GEO_GEO. o Q_CAMINO_GEO_NOGEO. o Q_GEO_EVENTO. o Q_NOGEO_UBICACION. o Q_CAMINO_NOGEO_GEO. o Q_CAMINO_NOGEO_NOGEO. o Q_NOGEO_EVENTO.

Estas modificaciones permitirán definir una trama de consulta, de acuerdo a lo que se mencionó en la sección 3.1.2.3.1, que especifique si un usuario solicita o no el mapa de su ubicación.

3.3.1 Paquetes diseñados La figura 3.27 muestra el diagrama general de clases de los cuatro paquetes diseñados y la relación entre éstos. En secciones posteriores se describe a detalle cada uno ellos.

Page 59: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

46

3.3.1.1 Paquete mx.edu.cenidet.apismsmms.conexionhttp

Este paquete contiene clases que representan la conexión a Internet para establecer comunicación con un servidor Web específico. Permite transferir datos mediante el protocolo HTTP (ver figura 3.28).

Figura 3.27 Diagrama de clases general de los paquetes diseñados para la API SMS/MMS.

class apismsmms

AgregarElementosSVG

imgSVG: SVGImage

AgregarElementosSVG()

dibujarCamino(SVGImage, String) : void

dibujarLinea(SVGImage, float, float, float, float) : void

dibujarPunto(SVGImage, float, float, String, String, String) : void

dibujarTexto(SVGImage, float, float, String, String) : void

obtenerImagen() : SVGImage

obtenerPuntos(String) : Vector

validarCadena(String) : boolean

validarCoordenadas(float, float) : boolean

validarId(Document, String, String) : boolean

Canv asSVG

scalableGraphics: ScalableGraphics

scalableImage: ScalableImage

CanvasSVG(ScalableImage)

paint(Graphics) : void

ImagenSVG

animador: SVGAnimator

canvas: Canvas

mapaSVG: SVGImage = null

cargarMapa(String) : Canvas

cargarMapa(ByteArrayInputStream) : Canvas

getMapa() : SVGImage

restablecerMapa() : void

zoom(float) : void

ConexionHTTP

conHttp: HttpConnection = null

abrirConexionHttp(String) : int

cerrarConexionHttp() : void

enviarPeticion() : byte[]

ConexionHTTPException

ConexionHTTPException(String)

PropiedadesGETMap

BBOX: String = "0,0,480,640"

BGCOLOR: String = null

CRS: String = "CRS:1"

FORMAT: String = "image/svg%2Bxml"

HEIGHT: String = "640"

LAYERS: String = ""

queryString: String = null

REQUEST: String = "GetMap"

STYLES: String = ""

TRANSPARENT: String = null

URL: String = "http://148.208...

VERSION: String = "1.3.0"

WIDTH: String = "480"

getRequest() : String

getURL() : String

imprimirPropiedadesGETMAP() : void

PropiedadesGETMap()

setBBox(String) : void

setBGColor(String) : void

setCRS(String) : void

setDefaultValues() : void

setFormat(String) : void

setHeight(String) : void

setLayers(String) : void

setRequest(String) : void

setStyles(String) : void

setTransparent(String) : void

setUrl(String) : void

setVersion(String) : void

setWidth(String) : void

ConexionException

ConexionException(String)

ConexionMensajes

msgCon: MessageConnection = null

abrirConexion(String) : MessageConnection

cerrarConexion(MessageConnection) : void

ConexionMensajes()

ReceptorMensajes

descripcion: String = null

mensaje: Message = null

msgCon: MessageConnection

tipoMsg: String = null

descripcionMMS() : String

escribeDescripcionMMS(String) : void

escribeTipoMensaje(String) : void

leerTipoMensaje() : String

procesarMensajeMMS(Message) : byte[]

procesarMensajeSMS(Message) : String

recibirMensaje(MessageConnection) : Message

Localizacion

altitud: float

coordenadas: Coordinates = null

criterio: Criteria = null

latitud: double

localizacion: Location

longitud: double

proveedor: LocationProvider = null

Geoposicion(boolean, int) : void

leeAltitud() : float

leeLatitud() : double

leeLongitud() : double

LocalizacionException

LocalizacionException(String)

Page 60: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

47

Las clases que conforman el paquete son las siguientes:

ConexionHTTP. Los métodos que proporciona esta clase permiten abrir una conexión a Internet a una URL específica, enviar una petición GET para obtener datos y cerrar la conexión.

ConexionHTTPException. Esta clase permite manejar las excepciones que se presentan cuando ocurren errores en la clase ConexionHttp.

PropiedadesGETMap. Permite formar una URL con los parámetros necesarios para solicitar un mapa a un servidor de mapas.

La aplicación define la URL con los paramétros necesarios para realizar la petición por medio de los métodos de la clase PropiedadesGETMap. En un hilo se crea el objeto ConexionHTTP para abrir la conexión y enviar la petición GetMap para solicitar un mapa, si ésta se realiza con éxito se obtienen los datos. La aplicación procesa el resultado para mostrar el mapa en pantalla. El diagrama de secuencia de este proceso se muestra en la figura 3.29.

class conexionhttp

ConexionHTTP

- conHttp: HttpConnection = null

+ abrirConexionHttp(String) : int

+ cerrarConexionHttp() : void

+ enviarPeticion() : byte[]

Exception

ConexionHTTPException

+ ConexionHTTPException(String)

PropiedadesGETMap

- BBOX: String = "0,0,480,640"

- BGCOLOR: String = null

- CRS: String = "CRS:1"

- FORMAT: String = "image/svg%2Bxml"

- HEIGHT: String = "640"

- LAYERS: String = ""

- queryString: String = null

- REQUEST: String = "GetMap"

- STYLES: String = ""

- TRANSPARENT: String = null

- URL: String = "http://148.208...

- VERSION: String = "1.3.0"

- WIDTH: String = "480"

+ getRequest() : String

+ getURL() : String

+ imprimirPropiedadesGETMAP() : void

+ PropiedadesGETMap()

+ setBBox(String) : void

+ setBGColor(String) : void

+ setCRS(String) : void

+ setDefaultValues() : void

+ setFormat(String) : void

+ setHeight(String) : void

+ setLayers(String) : void

+ setRequest(String) : void

+ setStyles(String) : void

+ setTransparent(String) : void

+ setUrl(String) : void

+ setVersion(String) : void

+ setWidth(String) : void

Figura 3.28 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.conexionhttp.

Page 61: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

48

3.3.1.2 Paquete mx.edu.cenidet.apismsmms.conexionmms

Las clases que integran el paquete conexionmms (figura 3.30), permiten abrir una conexión para recibir mensajes en el dispositivo móvil por medio de una aplicación. Este paquete utiliza la API Wireless Messaging (WMA 2.0) que se describe en el JSR-205 [Jsr205].

sd conexionhttp

MIDlet

ConexionHTTPPropiedadesGETMap ConexionHTTPException

Si ocurre un error al

abrir la conexión, se

genera una

excepción

setURL(url)

setVersion(version)

setLayers(layers)

setCRS(crs)

setBBox(bbox)

setWidth(width)

setHeight(height)

setFormat(formato)

setBGColor(bgcolor)

setTransparent(transparencia)

setRequest(request)

setStyles

getRequest

url formada :String

abrirConexion(url)

codigo de estado de la conexión HTTP :int

Error en la conexión

Controlar excepción

imageData= enviarPetición :byte

Datos recibidos :byte

Mostrar resultado

cerrarConexionHTTP

Figura 3.29 Diagrama de secuencia para una conexión HTTP.

Figura 3.30 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.conexionmms.

class conexionmms

Exception

ConexionException

+ ConexionException(String)

ConexionMensajes

- msgCon: MessageConnection = null

+ abrirConexion(String) : MessageConnection

+ cerrarConexion(MessageConnection) : void

+ ConexionMensajes()

ReceptorMensajes

- descripcion: String = null

- mensaje: Message = null

- msgCon: MessageConnection

- tipoMsg: String = null

+ descripcionMMS() : String

- escribeDescripcionMMS(String) : void

- escribeTipoMensaje(String) : void

+ leerTipoMensaje() : String

+ procesarMensajeMMS(Message) : byte[]

+ procesarMensajeSMS(Message) : String

+ recibirMensaje(MessageConnection) : Message

Page 62: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

49

El paquete contiene las siguientes clases:

ConexionMensajes. Permite abrir y cerrar una conexión para mensajes en el dispositivo móvil.

ConexionException. Maneja las excepciones que permiten controlar los posibles errores en la clase ReceptorMensajes.

ReceptorMensajes. Representa la recepción y procesamiento de un mensaje dirigido a un puerto y una aplicación específica. Retorna el contenido de un mensaje SMS o de un MMS si éste contiene una imagen SVG.

Para que un MIDlet 7 reciba un mensaje, se crea un nuevo objeto de la clase ConexionMensajes para abrir una conexión en un puerto específico. Si ocurre un error al abrir la conexión, la clase ConexionException controla la excepción generada. El objeto ReceptorMensajes es el encargado de recibir el mensaje y procesarlo. La aplicación muestra el contenido y cierra la conexión. El diagrama de secuencia de este proceso se muestra en la figura 3.31.

7 Es una aplicación J2ME para dispositivos móviles desarrollada bajo la especificación MIDP.

sd conexionmms

MIDlet

ReceptorMensajesConexionExceptionConexionMensajes

Si ocurre un error

al abrir la

conexión, se lanza

una excepción

Definir URL para la

conexión de mensajes

abrirConexion(url)

conexion

Error en la conexión

Controlar excepción

recibirMensaje(conexion)

leerTipoMensaje()

Tipo de mensaje: "Texto", "Binario" o "Multimedia"

procesar mensaje de acuerdo al tipo

Mostrar contenido del mensaje

cerrarConexion(conexion)

Figura 3.31 Diagrama de secuencia para recibir un mensaje en una aplicación.

Page 63: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

50

3.3.1.3 Paquete mx.edu.cenidet.apismsmms.localizacionmovil

El paquete localizacionmovil (figura 3.32) contiene clases que permiten obtener los datos de localización de un usuario a través de un GPS interno al dispositivo móvil, o bien, utilizando la infraestructura de la operadora telefónica. El paquete utiliza la API Location para J2ME que se define en el JSR-179 [Jsr179].

Las clases del paquete son las siguientes:

Localizacion. Obtiene datos de localización como: latitud, longitud y altitud para determinar la ubicación de un usuario por medio del dispositivo móvil.

LocalizacionException. Maneja las excepciones de los errores que se pueden presentar en la clase Localizacion.

El diagrama de secuencia para obtener los datos de localización se muestra en la figura 3.33. En un hilo de ejecución, el MIDlet crea un nuevo objeto de tipo Localizacion e inicia una petición para obtener los datos de posición. Se inicia la búsqueda de un proveedor de localización y escribe los datos obtenidos. Si ocurre un error mientras se espera la información, se genera una excepción que controla la clase LocalizacionException. El MIDlet accede a los métodos de lectura de la clase Localizacion para obtener los datos de ubicación y procesarlos.

class localizacionmov il

Localizacion

- altitud: float

- coordenadas: Coordinates = null

- criterio: Criteria = null

- latitud: double

- localizacion: Location

- longitud: double

- proveedor: LocationProvider = null

+ Geoposicion(boolean, int) : void

+ leeAltitud() : float

+ leeLatitud() : double

+ leeLongitud() : double

Exception

LocalizacionException

+ LocalizacionException(String)

Figura 3.32 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.localizacionmovil.

Page 64: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

51

3.3.1.4 Paquete mx.edu.cenidet.apismsmms.mapasvg

El diagrama de clases del paquete mapasvg, representa la forma de cargar y mostrar el mapa SVG en la pantalla del dispositivo móvil (figura 3.34). Este paquete utiliza la API Scalable 2D Vector Graphics para J2ME que se especifica en el JSR-226 [Jsr226].

Las clases que integran el paquete son las siguientes:

ImagenSVG. Describe la forma de cargar, manipular e interactuar con un mapa SVG.

CanvasSVG. Crea una instancia de tipo Canvas para contener la imagen del mapa a mostrar en la pantalla.

Figura 3.33 Diagrama de secuencia para obtener datos de localización.

Figura 3.34 Diagrama de clases del paquete mx.edu.cenidet.apismsmms.mapasvg.

sd localizacionmov il

MIDlet

LocalizacionExceptionLocalizacion

Si no es posible obtener

los datos de

localización se genera

una excepción

LocalizacionException.

Obtener localización(tipo, metros)

Geoposicion(flag, meters)

Buscar proveedor para obtener datos de localización

leeLatitud()

retorna latitud

leerLongitud()

retorna longitud

leerAltitud()

retorna altitud

Error al leer los datos de localización

Controlar excepción

Mostrar datos de localización

class mapasv g

AgregarElementosSVG

- imgSVG: SVGImage

+ AgregarElementosSVG()

+ dibujarCamino(SVGImage, String) : void

+ dibujarLinea(SVGImage, float, float, float, float) : void

+ dibujarPunto(SVGImage, float, float, String, String, String) : void

+ dibujarTexto(SVGImage, float, float, String, String) : void

+ obtenerImagen() : SVGImage

- obtenerPuntos(String) : Vector

- validarCadena(String) : boolean

- validarCoordenadas(float, float) : boolean

- validarId(Document, String, String) : boolean

Canvas

Canv asSVG

- scalableGraphics: ScalableGraphics

- scalableImage: ScalableImage

+ CanvasSVG(ScalableImage)

+ paint(Graphics) : void

ImagenSVG

- animador: SVGAnimator

- canvas: Canvas

- mapaSVG: SVGImage = null

+ cargarMapa(String) : Canvas

+ cargarMapa(ByteArrayInputStream) : Canvas

+ getMapa() : SVGImage

+ restablecerMapa() : void

+ zoom(float) : void

Page 65: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 3: Análisis y Diseño

52

AgregarElementosSVG. Esta clase permite agregar nuevos elementos a la imagen de un mapa SVG como: puntos, líneas y texto para representar lugares de interés o un camino.

La figura 3.35 muestra el diagrama de secuencia para visualizar e interactuar con un mapa SVG en el dispositivo móvil, de acuerdo a las teclas y comandos que se ejecuten en el MIDlet. La clase ImagenSVG permite cargar una imagen para su visualización, aplicar zoom y restablecer su tamaño original. La clase CanvasSVG crea un objeto de tipo Canvas por medio del cual es posible que el dispositivo móvil responda a los eventos que generen las teclas de dirección para la operación paneo al cargar una imagen. Para dibujar puntos de interés y trazar un camino se emplea la clase AgregarElementosSVG.

sd mapasv g

MIDlet

AgregarElementosSVGCanvasSVGImagenSVG

cargarMapa(imagenSVG)

ListenerEventos(mapaSVG,animator)

Retornar Canvas con la imagen cargada

Aplicar operación zoom a la imagen

zoom(nivel_zoom)

Establecer tamaño original de la imagen

restablecerMapa

Agregar punto

dibujarPunto(imagen, x1, y1, idPunto, strEtiq, idTexto)

validarCoordenadas(x, y)

validarId(documento, idPunto, idTexto)

agregar elemento

Dibujar camino

dibujarCamino(imagen, cadena)

validarCadena(cadena)

obtenerPuntos(cadena)

dibujarLinea(imgSVG, x1, y1, x2, y2)

Figura 3.35 Diagrama de secuencia para mostrar e interactuar con un mapa SVG en el dispositivo móvil.

Page 66: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 4 IMPLEMENTACIÓN

En este capítulo se describe la manera de implementar los métodos creados para la API en aplicaciones (MIDlets) de tipo cliente para dispositivos móviles.

Page 67: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

54

Una vez terminada la fase de programación de los métodos de la API SMS/MMS de acuerdo a los objetivos establecidos, se presenta la forma de implementarlas. Para esto, se describen algunas secciones de código relevantes de las aplicaciones creadas para implementar y probar la API. Para desarrollar las funciones de la API y las aplicaciones (MIDlets), se utilizó como entorno de desarrollo NetBeans IDE 6.0 y los emuladores que incluye el paquete de movilidad Java Wireless Toolkit 2.5.2 para CLDC.

4.1 Solicitar mapa

En esta sección de código (figura 4.1) se muestra cómo insertar el dato en la trama de consulta para solicitar un mapa con puntos de interés (Q_GEO_UBICACION).

1 // QGeoUbicacion.java 2 … 3 import mx.edu.cenidet.apisms.dato.PoiGeoreferenciado; 4 … 5 public class QGeoUbicacion extends MIDlet implements CommandListener, ItemCommandListener { 6 private ChoiceGroup mapa; 7 private PoiGeoreferenciado poigeo; 8 … 9 public void commandAction(Command command, Item item) {

10 if(command==enviar) { 11 int num_resp=Integer.parseInt(cantidad.getString()); 12 String tel=telefono.getString(); 13 poigeo=new PoiGeoreferenciado(); 14 poigeo.EscribeLatitudG(latitud); 15 poigeo.EscribeLongitudG(longitud); 16 poigeo.EscibeClasif(palabra.getString(palabra.getSelectedIndex()).toUpperCase()); 17 poigeo.EscribeDistancia(distancia.getString(distancia.getSelectedIndex())); 18 if(mapa.getSelectedIndex()==0) 19 poigeo.EscribeMapa(true); 20 EnviarSMS enviar=new EnviarSMS(this,tel,num_resp,poigeo); 21 } 22 } 23 … 24 }

La condición de la línea 18 permite establecer si el usuario desea el mapa con los puntos de interés solicitados. En la línea 19 se envía el valor true al método EscribeMapa del objeto poigeo, con este código se agregará el dato para solicitar un mapa a la trama de consulta.

Figura 4.1 Datos para la trama de consulta georeferenciada de sitios de interés.

Page 68: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

55

4.2 Recibir mensaje MMS

En la figura 4.2 se muestra cómo implementar las clases ConexionMensajes y ReceptorMensajes para que un MIDlet reciba un mensaje de entrada en un puerto específico. La conexión se abre en el método startApp() de la aplicación y además debe implementar el método notifyIncomingMessage(MessageConnection mc) que proporciona la interfaz MessageListener de la API WMA [Jsr120] para recibir y procesar el mensaje, ya que dicho método se invoca cada vez que llega uno. La clase ReceptorMensajes permite recibir y procesar mensajes SMS (“Texto” y “Binario”) y mensajes MMS (“Multimedia”) que contengan un único archivo adjunto de tipo imagen, para este caso en formato SVG.

1 // AppRecibirMMS.java 2 … 3 import javax.wireless.messaging.Message; 4 import javax.wireless.messaging.MessageConnection; 5 import javax.wireless.messaging.MessageListener; 6 import mapasvg.MapaSVG; 7 … 8 public class AppRecibirMMS extends MIDlet implements CommandListener, MessageListener { 9 private ConexionMensajes miConexion = null;

10 private MessageConnection msgCon = null; 11 private Message msg; 12 private ReceptorMensajes recibirMsg; 13 private static final String PUERTO = "5004"; 14 … 15 public void startApp() { 16 // URL para la conexion de mensajes 17 url = "mms://:" + PUERTO; 18 if(miConexion == null) { 19 try { 20 miConexion = new ConexionMensajes(); 21 msgCon = miConexion.abrirConexion(url); 22 msgCon.setMessageListener(this); 23 } 24 catch(Exception e) { 25 System.err.println("Error en starApp(): " + e.getMessage()); 26 } 27 } 28 … 29 } 30 … 31 public void destroyApp(boolean unconditional) { 32 if(msgCon != null){ 33 try{ 34 msgCon.setMessageListener(null); 35 miConexion.cerrarConexion(msgCon); 36 } 37 catch(Exception e) { } 38 }

Page 69: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

56

39 } 40 … 41 public void notifyIncomingMessage(MessageConnection mc){ 42 msgCon = mc; 43 recibirMsg = new ReceptorMensajes(); 44 Thread h = new Thread() { 45 public void run() { 46 try { 47 msg = recibirMsg.recibirMensaje(msgCon); 48 String tipoMsg = recibirMsg.leerTipoMensaje(); 49 byte[] contenido; 50 if (tipoMsg != null) { 51 if (tipoMsg.equals("Multimedia")) { 52 contenido = recibirMsg.procesarMensajeMMS(msg); 53 … 54 } 55 else if (tipoMsg.equals("Texto") || tipoMsg.equals("Binario")) { 56 String sms = recibirMsg.procesarMensajeSMS(msg); 57 … 58 } 59 else 60 System.out.println("Tipo de mensaje no soportado"); 61 } 62 catch(Exception e) { e.printStackTrace(); } 63 } 64 }; h.start(); 65 … 66 }

Para abrir la conexión se debe definir una URL de tipo servidor, ya que sólo este tipo de conexión permite enviar y recibir mensajes (línea 17). En las líneas 20-22 se crea una instancia de la clase ConexionMensajes para abrir la conexión a la URL especificada y esperar mensajes. Esto se realiza en el método startApp() del MIDlet, el cual se invoca al iniciar su ejecución en el dispositivo móvil. Para recibir mensajes, se crea una instancia de la clase ReceptorMensajes y se inicia la ejecución de un hilo (líneas 43-45). En éste, se recibe el mensaje (línea 47) pero antes de procesarlo se debe conocer el tipo de contenido (línea 48). Si es un MMS, es de tipo “Multimedia” y se invoca el método procesarMensajeMMS (líneas 51, 52) para obtener el contenido como un arreglo de bytes y manipularlo en la aplicación como más convenga. Si el tipo resultara “Texto” o “Binario”, el método que se debe invocar es procesarMensajeSMS (líneas 55, 56). Al finalizar la ejecución del MIDlet, en su método destroyApp() se cierra la conexión de mensajes (líneas 34,35).

Figura 4.2 Implementación de los métodos para recibir y procesar un mensaje.

Page 70: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

57

4.3 Procesar imágenes SVG

La clase que se debe implementar para cargar y mostrar el mapa en la pantalla del dispositivo móvil es ImagenSVG. La figura 4.3 muestra cómo utilizar los métodos para realizar las operaciones mencionadas.

1 // App_ImagenSVG.java 2 … 3 public class App_ImagenSVG extends MIDlet implements CommandListener { 4 … 5 private Canvas canvas; 6 private String ejemplos[] = {"my_croquis2_T11.svg", "ejemplo_croquisSVGT11.svg"}; 7 … 8 public void commandAction(Command c, Displayable d){ 9 …

10 else if(c == cmdVer) { 11 map = new ImagenSVG(); 12 if(opc.getSelectedIndex() == 0) 13 canvas = map.cargarMapa(opc.getString(0)); 14 else 15 canvas = map.cargarMapa(opc.getString(1)); 16 … 17 canvas.setCommandListener(this); 18 display.setCurrent(canvas); 19 } 20 … 21 } 22 … 23 }

En este ejemplo, la imagen del mapa se carga y muestra por medio de la ejecución de un comando. En la línea 11 se crea una instancia de la clase ImagenSVG. Las líneas 13 y 15 invocan el método cargarMapa enviándole como parámetro una cadena que contiene el nombre de la imagen. Retorna un objeto de tipo Canvas que contiene la imagen del mapa, se asigna a una variable del mismo tipo y se muestra en la pantalla del dispositivo móvil (línea 18). El método cargarMapa también puede recibir como parámetro un objeto de tipo ByteArrayInputStream que represente una imagen SVG, de lo contrario ocurrirá un error durante el proceso de carga debido a que el parámetro enviado no contiene el código SVG esperado.

4.4 Representar puntos de interés

La clase que se implementa para dibujar puntos de interés sobre un mapa SVG es AgregarElementosSVG, específicamente su método dibujarPunto. El código de ejemplo se muestra en la figura 4.4.

Figura 4.3 Implementación de los métodos para recibir y procesar un mensaje.

Page 71: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

58

1 // App_Croquis_POIs.java 2 … 3 public class App_Croquis_POIs extends MIDlet implements CommandListener { 4 … 5 private AgregarElementosSVG dibujarElements = new AgregarElementosSVG(); 6 … 7 public void commandAction(Command c, Displayable d){ 8 … 9 else if(c == cmdPuntos){

10 … 11 int indice1, contador = 0; 12 float x1, y1; 13 String strX1, strY1, strEtiq, idPunto, idTexto; 14 indice1 = -1; 15 for(int i =0; i<size; i++) { 16 indice1 = indice1 + 3; 17 strX1 = (String) puntitos.elementAt(indice1-2); 18 strY1 = (String) puntitos.elementAt(indice1-1); 19 strEtiq = (String) puntitos.elementAt(indice1); 20 x1 = Float.parseFloat(strX1); 21 y1 = Float.parseFloat(strY1); 22 idPunto = "Punto" + contador; 23 idTexto = "Texto" + contador; 24 dibujarElements.dibujarPunto(imagen, x1, y1, idPunto, strEtiq, idTexto); 25 contador++; 26 … 27 } 28 … 29 } 30 … 31 } 32 … 33 }

En el código anterior, los puntos se agregan en un mapa SVG previamente cargado en el dispositivo móvil al ejecutar un comando de la aplicación. En la línea 5 se crea una instancia de la clase AgregarElementosSVG. La aplicación de ejemplo invoca el método dibujarPunto en un ciclo for para dibujar varios puntos (línea 24). Los parámetros que se le envían son:

SVGImage imagen. Representa la imagen SVG del mapa sobre el cual se dibujarán los puntos.

float x. Es la coordenada x sobre el eje de las abscisas para el punto a dibujar.

float y. Es la coordenada y sobre el eje de las ordenadas para el punto a dibujar.

String idPunto. Es el identificador para el punto a dibujar y éste deberá ser único, de lo contrario se generará un error.

String strEtiq. Representa la etiqueta o texto que se dibujará con el punto. Esta variable puede ser null si se desea dibujar un punto sin texto.

String idTexto. Es un identificador único para la etiqueta de un punto.

Figura 4.4 Implementación de la clase AgregarElementosSVG para dibujar puntos de interés en un mapa SVG.

Page 72: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

59

Para el método dibujarPunto, el programador es el responsable de implementar, como mejor le convenga, el ciclo para agregar más de un punto así como para asignar los identificadores de los elementos a representar.

4.5 Trazar camino

Al igual que en el caso anterior, la clase que se implementa para trazar un camino es AgregarElementosSVG mediante el método dibujarCamino. La figura 4.5 muestra los segmentos de código de la aplicación de ejemplo que hace uso de este método.

1 // App_Croquis_Camino.java 2 … 3 public class App_Croquis_Camino extends MIDlet implements CommandListener { 4 … 5 private AgregarElementosSVG dibujarElements = new AgregarElementosSVG(); 6 private String cadena; 7 … 8 public App_Croquis_Camino(){ 9 cadena = "233,43;173,43;135,127;118,169;86,169;86,212;";

10 … 11 } 12 … 13 public void commandAction(Command c, Displayable d){ 14 … 15 else if(c == cmdCamino){ 16 … 17 for(int i =0; i<size; i++) { 18 … 19 dibujarElements.dibujarPunto(imagen, x1, y1, idPunto, strEtiq, idTexto); 20 … 21 } 22 dibujarElements.dibujarCamino(imagen, cadena); 23 … 24 } 25 … 26 } 27 … 28 }

En este ejemplo, se dibujan una serie de puntos y posteriormente, se traza un camino que une dichos puntos. En la línea 5 del código anterior, se crea una instancia de la clase AgregarElementosSVG, en la 19 se dibujan los puntos y en la 22 se traza el camino que uno los puntos previamente representados. El método dibujarCamino traza una serie de líneas unidas que permiten representar un camino. Los parámetros que recibe son dos:

Figura 4.5 Implementación de la clase AgregarElementosSVG para representar un camino sobre un mapa SVG.

Page 73: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

60

SVGImage imagen. Es el mapa SVG en donde se representará el camino.

String cadena. Es una cadena que contiene las coordenadas (x, y) que permitirán definir los puntos de inicio y fin de las líneas del camino a trazar (línea 9). La cadena deberá estar formada como sigue: x1,y1;x2,y2;x3,y3;…;xn,yn; De esta manera, el separador entre la coordenada x y la coordenada y es el símbolo “,” y el separador entre cada par ordenado es el símbolo “;”. Si la cadena es incorrecta, no será posible dibujar el camino.

4.6 Obtener datos de localización

En la figura 4.6 se muestra como implementar la clase Localizacion para obtener la posición del usuario por medio de su dispositivo móvil.

1 // LBSMidlet.java 2 … 3 public class LBSMidlet extends MIDlet implements CommandListener { 4 … 5 private Localizacion conex; 6 private int meters; 7 private boolean flag; 8 … 9 public void commandAction(Command c, Displayable d){

10 … 11 else if(c == getLocation) { 12 … 13 conex = new Localizacion(); 14 new Thread() { 15 public void run() { 16 try { 17 conex.Geoposicion(flag, meters); 18 etiq2 = new StringItem("Latitud : ", Double.toString(conex.leeLatitud())); 19 etiq3 = new StringItem("Longitud : ", Double.toString(conex.leeLongitud())); 20 etiq4 = new StringItem("Altitud : ", Float.toString(conex.leeAltitud())); 21 … 22 } 23 catch(Exception e){ 24 System.out.println("Ocurrió un error: " + e.getMessage()); 25 } 26 } 27 }.start(); 28 … 29 } 30 … 31 } 32 }

Para obtener los datos de ubicación del usuario (latitud, longitud y altitud), se debe implementar un hilo de ejecución en el que se invoque el método Geoposicion de la clase Localizacion (línea 17). Con este método, se define un criterio para buscar el proveedor de

Figura 4.6 Implementación de la clase Localizacion para obtener la posición de un usuario a través de su dispositivo móvil.

Page 74: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

61

localización. Si el valor del primer parámetro es true se indica que los datos de localización se podrán obtener de un proveedor que utilice la red de telefonía móvil para conocer dicha información y esto puede generar algún costo para el usuario. En caso contrario, el valor deberá ser false para que la ubicación se obtenga a partir de un proveedor como un dispositivo GPS integrado al dispositivo móvil. El segundo parámetro indica la exactitud de la ubicación en metros que se desea. Si la búsqueda de algún proveedor es exitosa, se obtendrán los datos de localización (líneas 18-20).

4.7 Conexión HTTP

La forma de implementar las clases para realizar una conexión HTTP se muestra en la figura 4.7.

1 //HttpMIDlet.java 2 … 3 public class HttpMIDlet extends MIDlet implements CommandListener { 4 … 5 PropiedadesGETMap propiedades = new PropiedadesGETMap (); 6 private ConexionHTTP conexionHttp; 7 … 8 public void commandAction(Command c, Displayable d){ 9 …

10 else if (c == okCommand){ 11 … 12 propiedades.setUrl("http://terraservice.net/ogcmap.ashx"); 13 propiedades.setVersion("1.1.1"); 14 propiedades.setLayers("doq"); 15 propiedades.setCRS("EPSG:26911"); 16 propiedades.setBBox("282587,4188958,283717,4190390"); 17 propiedades.setWidth("240"); 18 propiedades.setHeight("300"); 19 propiedades.setFormat("image/jpeg"); 20 … 21 URL = propiedades.getRequest(); 22 Thread hilo = new Thread(){ 23 public void run() { 24 try{ 25 conexionHttp = (ConexionHttp) new ConexionHTTP(); 26 int code = conexionHttp.abrirConexionHttp(URL); 27 if(code == 200){ 28 StringItem peticion = new StringItem(propiedades.getRequest(), ""); 29 byte imageData[] = conexionHttp.enviarPeticion(); 30 try { 31 Image img = Image.createImage(imageData, 0, imageData.length); 32 displayForm.append(img); 33 } 34 … 35 } 36 … 37 } 38 }; hilo.start();

Page 75: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

62

39 … 40 } 41 … 42 } 43 }

Las líneas de código 13-20 permiten establecer los parámetros necesarios para realizar una petición GetMap para solicitar un mapa a un servidor de mapas, de acuerdo a la especificación que establece OGC (Open Geospatial Consortium) en el documento OpenGIS Web Map Server Implementation Specification versión 1.3.0 [OGC]. Ver tabla 4.1.

Tabla 4.1 Parámetros para solicitar un mapa por medio de la petición GetMap.

Parámetro de petición Tipo Descripción

VERSION=1.3.0 Obligatorio Versión de la petición

REQUEST=GetMap Obligatorio Nombre de la petición

LAYERS=lista_capas Obligatorio Lista de una o más capas

STYLES=lista_estilos Obligatorio Lista de uno o más estilos

CRS=namespace:identificador Obligatorio Sistema de referencia de coord.

BBOX=minx,miny,maxx,maxy Obligatorio Espacio de referencia

WIDTH=ancho_salida Obligatorio Ancho en píxeles

HEIGHT=alto_salida Obligatorio Alto en píxeles

FORMAT=formato_salida Obligatorio Formato de salida del mapa

TRANSPARENT=TRUE|FALSE Opcional Transparencia del fondo del mapa

BGCOLOR=valor_color Opcional Valor hexadecimal para el color de fondo

En un hilo de ejecución, se abre la conexión Http a la URL que se obtuvo con la clase PropiedadesGETMap para solicitar un mapa (líneas 25, 26). Si la respuesta del servidor es correcta, se envía la petición para obtener el mapa solicitado y visualizarlo en el dispositivo móvil (líneas 29, 31, 32).

4.8 Visualizar e interactuar con el mapa SVG

La clase ImagenSVG proporciona métodos que permiten interactuar con la imagen a través de comandos y teclas del dispositivo móvil. Cuando se invoca el método cargarMapa para cargar una imagen SVG, éste automáticamente implementa la función paneo para desplazar la imagen en las direcciones: arriba, abajo, izquierda y derecha por medio de los botones de dirección del dispositivo móvil. Para las funciones zoom-in y zoom-out se invoca el método zoom que requiere como parámetro un valor de punto flotante que determinará el tipo de transformación que se le aplicará a la imagen. Si el valor es positivo se realizará un zoom-in, si es negativo será un zoom-out. Para regresar la imagen a su estado original se deberá invocar el método restablecerMapa. La figura 4.8 muestra la forma de implementarlos en una aplicación.

Figura 4.7 Implementación de las clases PropiedadesGETMap y ConexionHTTP para solicitar un mapa por medio del protocolo Http desde un dispositivo móvil.

Page 76: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 4: Implementación

63

1 // App_Croquis_POIs.java 2 … 3 public class App_Croquis_POIs extends MIDlet implements CommandListener { 4 … 5 private Command cmdZoomin; 6 private Command cmdZoomout; 7 private Command cmdReset; 8 … 9 public void commandAction(Command c, Displayable d){

10 … 11 else if(c == cmdZoomin){ 12 map.zoom(0.10f); 13 } 14 else if(c == cmdZoomout){ 15 map.zoom(-0.10f); 16 } 17 else if(c == cmdReset) { 18 map.restablecerMapa(); 19 canvas.repaint(); 20 } 21 … 22 } 23 … 24 }

Las operaciones zoom-in, zoom-out y vista original se implementan a través de un objeto de tipo comando en la aplicación (líneas 12, 15 y 18 respectivamente).

Figura 4.8 Implementación de los métodos de la clase ImagenSVG para interactuar con el mapa.

Page 77: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 5 PRUEBAS

En este capítulo se presentan las pruebas realizadas y los resultados obtenidos al implementar la API SMS/MMS.

Page 78: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

65

Los casos de prueba que se presentan en este capítulo se definieron previamente en el Plan de Pruebas del anexo C, de acuerdo al estándar IEEE-829. Las características que se probaron son las siguientes:

Formar trama para solicitar un mapa. Se probó que la trama del mensaje SMS para solicitar un mapa se forma correctamente.

Recibir respuesta en un mensaje MMS. Se verificó que se recibe un mensaje MMS en donde el contenido es la imagen de un mapa SVG.

Procesar imágenes de mapas SVG. Se probó que las imágenes de los mapas SVG se cargan y visualizan correctamente en el dispositivo móvil.

Representar puntos de interés sobre un mapa. Se verificó que se agregan y dibujan nuevos elementos a una imagen SVG para representar puntos de interés.

Trazar camino. Se probó que se dibuja un camino sobre el mapa por medio de una cadena que define el conjunto de puntos que conforman el camino.

Obtener datos de localización del dispositivo móvil. Se probó que se obtienen los datos de localización del dispositivo móvil (latitud, longitud, altitud) a través de la red de telecomunicaciones de la compañía telefónica del dispositivo o por GPS interno.

Implementar conexiones HTTP. Se enviaron y recibieron datos a un servidor de mapas a través de una conexión a Internet por medio del protocolo HTTP.

Visualizar e interactuar con el mapa. Se verificó que las operaciones: zoom-in, zoom-out, paneo y vista original sobre la imagen del mapa funcionan correctamente.

Las aplicaciones de prueba se crearon en el entorno de desarrollo de NetBeans Mobility 6.0 y los emuladores de Sun Java Wireless Toolkit 2.5.2 para CLDC.

Page 79: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

66

CASO DE PRUEBA APISMSMMS-01-01 Consulta georeferenciada para solicitar un mapa con puntos de interés.

DESCRIPCIÓN: Enviar una consulta georeferenciada al servidor solicitando un mapa con las centrales de autobuses

cercanas al punto de localización del cliente móvil. Se comprueba que la trama de tipo Q_GEO_UBICACION se forma correctamente.

RESULTADO Trama formada: 0;4;0;5,9,18.876709,-99.219766,1

CASO DE PRUEBA APISMSMMS-01-02 Consulta para solicitar el mapa de un camino con puntos de inicio y fin georeferenciados.

DESCRIPCIÓN: Consulta para solicitar el mapa de un camino en donde los puntos de inicio y fin son georeferenciados.

Se comprueba que la trama de tipo Q_CAMINO_GEO_GEO se forma correctamente.

RESULTADO Trama formada: 1;5;0;2,18.876748,-99.219381;18.878702,-99.227254,1;

Figura 5.1 Trama de consulta Q_GEO_UBICACION para solicitar un mapa.

Figura 5.2 Trama de consulta Q_CAMINO_GEO_GEO para solicitar un mapa.

Page 80: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

67

CASO DE PRUEBA APISMSMMS-01-03 Consulta para solicitar el mapa de un camino con punto inicial georeferenciado y punto final no georeferenciado.

DESCRIPCIÓN: Consulta para solicitar el mapa de un camino en donde el punto de inicio es georeferenciado y el fin es

un punto no georeferenciado. Se comprueba que la trama de tipo Q_CAMINO_GEO_NOGEO se forma correctamente.

RESULTADO Trama formada: 2;5;0;2,18.878702,-99.227254;Av. Estado de Puebla,392,Lazaro Cardenas,62080,Cuernavaca,Cuernavaca,Morelos,Mexico,1

CASO DE PRUEBA APISMSMMS-01-04 Consulta georeferenciada para solicitar un mapa con eventos cercanos.

DESCRIPCIÓN: Consulta para solicitar un mapa con eventos cercanos al punto de ubicación del cliente móvil. Se

comprueba que la trama de tipo Q_GEO_EVENTO se forma correctamente.

RESULTADO Trama formada: 3;8;0;0,9,2,27/07/2008,18.876709,-99.219766,1

Figura 5.4 Trama de consulta Q_GEO_EVENTO para solicitar un mapa.

Figura 5.3 Trama de consulta Q_CAMINO_GEO_NOGEO para solicitar un mapa.

Page 81: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

68

CASO DE PRUEBA APISMSMMS-01-05 Consulta no georeferenciada para solicitar un mapa con sitios de interés.

DESCRIPCIÓN: Consulta no georeferenciada para solicitar un mapa con los hospitales más cercanos al punto de

localización del cliente. Se comprueba que la trama de tipo Q_NOGEO_UBICACION se forma correctamente.

RESULTADO Trama formada: 5;2;0;7,10,Gutemberg,89,Centro,62000,Cuernavaca,Cuernavaca,Morelos,Mexico,1

CASO DE PRUEBA APISMSMMS-01-06 Consulta para solicitar el mapa de un camino con punto inicial no georeferenciado y punto final georeferenciado.

DESCRIPCIÓN: Consulta para solicitar el mapa de un camino en donde el punto de inicio es no georeferenciado y el

punto final es georeferenciado. Se comprueba que la trama de tipo Q_CAMINO_NOGEO_GEO se forma correctamente.

RESULTADO Trama formada: 6;10;0;2,Av. Juarez,433,Centro,62000,Cuernavaca,Cuernavaca,Morelos,Mexico;18.878702,-99.227254,1;

Figura 5.5 Trama de consulta Q_NOGEO_UBICACION para solicitar un mapa.

Figura 5.6 Trama de consulta Q_CAMINO_NOGEO_GEO para solicitar un mapa.

Page 82: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

69

CASO DE PRUEBA APISMSMMS-01-07 Consulta para solicitar el mapa de un camino con punto de inicio y fin no georeferenciados.

DESCRIPCIÓN: Consulta para solicitar el mapa de un camino en donde los puntos de inicio y fin son no

georeferenciados. Se comprueba que la trama Q_CAMINO_NOGEO_NOGEO se forma correctamente.

RESULTADO Trama formada: 7;10;0;2,Priv. Las Flores,32,Lazaro Cardenas,62080,Cuernavaca,Cuernavaca,Morelos,Mexico;Internado Palmira,30,Palmira,62490,Cuernavaca,Cuernavaca,Morelos,Mexico,1

CASO DE PRUEBA APISMSMMS-01-08 Consulta no georeferenciada para solicitar el mapa de eventos cercanos.

DESCRIPCIÓN: Consulta no georeferenciada para solicitar un mapa con los eventos cercanos al punto de localización

del cliente móvil. Se comprueba que la trama de tipo Q_NOGEO_EVENTO se forma correctamente.

RESULTADO Trama formada: 8;8;0;0,11,4,27/07/2008,Av. Morelos,395,Centro,62000,Cuernavaca,Cuernavaca,Morelos,Mexico,1

Figura 5.7 Trama de consulta Q_CAMINO_NOGEO_NOGEO para solicitar un mapa.

Figura 5.8 Trama de consulta Q_NOGEO_EVENTO para solicitar un mapa.

Page 83: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

70

CASO DE PRUEBA APISMSMMS-02 Recibir respuesta en un mensaje MMS.

DESCRIPCIÓN: Se recibe un mensaje MMS que contiene un mapa SVG. Se comprueba que el MIDlet recibe

correctamente el mensaje y muestra su contenido en el dispositivo móvil.

RESULTADO Contenido del mensaje MMS: ejemplo_croquisSVGT11.svg

Figura 5.9 Envío del mensaje MMS desde la consola WMA de NetBeans.

Figura 5.10 MIDlet que recibe un MMS y muestra el contenido SVG del mensaje.

Destino del mensaje Contenido del mensaje

Page 84: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

71

CASO DE PRUEBA APISMSMMS-03 Procesar imágenes de mapas SVG.

DESCRIPCIÓN: El MIDlet carga una imagen SVG. Se comprueba la correcta visualización de la imagen en el dispositivo

móvil.

RESULTADO Imágenes cargadas: my_croquis2_T11.svg, ejemplo_croquisSVGT11.svg

Figura 5.11 Ejemplo de carga y visualización de imágenes SVG.

Page 85: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

72

CASO DE PRUEBA APISMSMMS-04 Representar puntos de interés sobre un mapa.

DESCRIPCIÓN: El MIDlet carga un mapa SVG y dibuja un conjunto de puntos de interés sobre éste. Se comprueba la

correcta inserción de los puntos en la imagen.

RESULTADO Imagen cargada: ejemplo_croquisSVGT11.svg

CASO DE PRUEBA APISMSMMS-05 Trazar camino.

DESCRIPCIÓN: El MIDlet carga un mapa SVG y dibuja un conjunto de puntos y líneas para trazar un camino. Se

comprueba la correcta inserción de los elementos que representan el camino en la imagen.

RESULTADO Imagen cargada: my_croquis1_T11.svg

Figura 5.12 Representación de puntos de interés en un mapa.

Figura 5.13 Representación de un camino sobre un mapa.

Page 86: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

73

CASO DE PRUEBA APISMSMMS-06 Obtener datos de localización del dispositivo móvil.

DESCRIPCIÓN: El MIDlet obtiene los datos de localización del dispositivo móvil de acuerdo al criterio de ubicación que

se establece. Se comprueba que se obtiene la posición georeferenciada del usuario.

RESULTADO Datos de ubicación: latitud (40.577), longitud (77.657) y altitud (78).

CASO DE PRUEBA APISMSMMS-07 Implementar conexiones HTTP.

DESCRIPCIÓN: El MIDlet abre una conexión HTTP a una URL específica y realiza una petición GET para solicitar un

mapa. Se comprueba que la conexión entre la aplicación cliente y el servidor así como la transmisión de datos es correcta.

RESULTADO Mapa en formato PNG de 235x180 píxeles

Figura 5.14 Localización georeferenciada del usuario móvil.

Figura 5.15 Conexión HTTP para realizar una petición GET y obtener un mapa.

Page 87: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

74

CASO DE PRUEBA APISMSMMS-08-01 Zoom-in.

DESCRIPCIÓN: El MIDlet implementa el método zoom-in para realizar diversos niveles de acercamiento a la imagen del

mapa. Se comprueba que la operación zoom-in funciona correctamente.

RESULTADO

CASO DE PRUEBA APISMSMMS-08-02 Zoom-out.

DESCRIPCIÓN: El MIDlet implementa el método zoom-out para realizar diversos niveles de alejamiento a la imagen del mapa. Se comprueba que la operación zoom-out funciona correctamente.

RESULTADO

Figura 5.16 Imagen de un mapa SVG con distintos niveles de acercamiento.

Figura 5.17 Imagen de un mapa SVG con distintos niveles de alejamiento.

Page 88: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 5: Pruebas

75

CASO DE PRUEBA APISMSMMS-08-03 Paneo.

DESCRIPCIÓN: El MIDlet implementa el método paneo para desplazarse sobre la imagen del mapa en las direcciones:

arriba, abajo, derecha e izquierda. Se comprueba que la operación paneo funciona correctamente.

RESULTADO

Figura 5.18 Imagen de un mapa SVG desplazada en distintas direcciones de la pantalla.

Botones asignados para mover la imagen

Page 89: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

CAPÍTULO 6 CONCLUSIONES Y

TRABAJOS FUTUROS

Page 90: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 6: Conclusiones y trabajo futuros

77

6.1 Conclusiones

El trabajo de investigación que se presenta en este documento permitió desarrollar una API bajo el estándar J2ME para crear aplicaciones para dispositivos móviles. Está orientada hacia teléfonos de última generación, smartphones y pockets PC que soporten la configuración CLDC 1.1 y perfil MIDP 2.0 de Java. Esto es debido a que las características tecnológicas de hardware y software de los dispositivos mencionados permiten implementar la API.

El principal objetivo de la API es ofrecer servicios que faciliten al programador el desarrollo de aplicaciones basadas en localización. Las tecnologías que utiliza son: mensajería SMS/MMS, GPS y HTTP. Además, ofrece soporte para manipular mapas en formato SVG Tiny.

Las principales razones por las cuales se determinó que la API proporcionara soporte para manipular mapas en formato SVG son:

Los gráficos SVG son escalables (no pierden calidad al modificar o aumentar su tamaño).

El espacio que ocupa un archivo en este formato se reduce considerablemente si se compara con una imagen en formato raster.

Es posible manipular las imágenes en tiempo real para agregar o borrar elementos.

Es un estándar libre. Durante el desarrollo de este trabajo se encontraron algunos problemas y desventajas al utilizar gráficos SVG en dispositivos móviles:

Es un estándar relativamente nuevo (la primera especificación SVG que definió el W3C fue en septiembre de 2001), esto dificultó la búsqueda de información para conocer de manera detalla la especificación del lenguaje para su aplicación y programación en J2ME.

La mayoría de las herramientas que existen para editar y visualizar contenido SVG Mobile exigen la compra de una licencia para su uso.

Actualmente, sólo los dispositivos móviles más recientes soportan el formato y la API para gráficos SVG Tiny. Entre las empresas que destacan por el desarrollo e implementación de la API para estos gráficos se encuentran: Nokia, Motorola y Sony Ericsson.

Las expectativas que se tienen acerca del formato SVG son prometedoras y se espera que su desarrollo y uso siga en aumento, desplazando imágenes en formato JPG, GIF e incluso Flash; especialmente en el ambiente móvil, en donde los recursos de memoria y procesamiento son limitados. Los dispositivos móviles que se tenían contemplados para realizar las pruebas fueron: Nokia 9300i y BenQ P50; sin embargo, no se utilizaron debido a que no soportan las APIs: Location (JSR 179), Scalable 2D Vector Graphics (JSR 226) y Wireless Messaging API 2.0 (JSR 205). Éstas son indispensables para implementar los métodos que proporciona la API SMS/MMS para la ubicación a través del dispositivo móvil, visualización e interacción con el mapa SVG y mensajes MMS respectivamente.

Page 91: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 6: Conclusiones y trabajo futuros

78

Se intentó actualizar el firmware 8 de los dispositivos móviles mencionados pero los fabricantes, a través de sus páginas oficiales, no ofrecen soporte técnico para tal operación. La razón por la que es requisito que la configuración del dispositivo móvil sea CLDC 1.1, es que ésta soporta el uso de números en punto flotante, los cuales son necesarios para realizar las funciones de zoom y agregar elementos al mapa SVG así como para los datos de localización (latitud, altitud y lontitud). CLDC 1.0 no proporciona esta característica.

Aunque actualmente existen diversas herramientas y entornos de desarrollo, la programación para dispositivos móviles resulta complicada por la heterogeneidad que los caracteriza. Cada fabricante implementa APIs, aplicaciones y sistemas operativos propietarios que dificultan la interoperabilidad entre un dispositivo y otro. Por esta razón, es importante seguir los lineamientos y estándares especificados para la programación en dispositivos móviles con el objetivo de disminuir el problema de compatibilidad e interoperabilidad. J2ME es un estándar que proporciona una plataforma muy completa para el desarrollo de aplicaciones, ya que dispone de máquinas virtuales y librerías (APIs) dirigidas a un amplio rango de dispositivos móviles. Las APIs están orientadas a resolver una necesidad de programación a través de una tecnología específica. Los resultados que se presentan cumplen con el objetivo y alcances que se fijaron al iniciar el trabajo de investigación, aún cuando no fue posible realizar las pruebas en dispositivos móviles reales debido a la falta de equipo que cumpliera con las características necesarias para implementar la API.

8 Es un programa que se encuentra incrustado en un dispositivo hardware, por ejemplo un microcontrolador.

También se puede proporcionar como una memoria flash o un archivo de imagen binario que el usuario puede actualizar.

Page 92: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Capítulo 6: Conclusiones y trabajo futuros

79

6.2 Trabajo futuros

En este trabajo de investigación se observó que la tecnología en dispositivos móviles aumenta de manera rápida. Esto hace posible crear aplicaciones y servicios cada vez más sofisticados que aprovechen al máximo las capacidades de los dispositivos.

Con base en lo anterior, se sugieren algunas actividades futuras que pueden complementar y mejorar este trabajo de investigación:

Realizar un análisis de los distintos formatos de imágenes, tanto vectoriales como raster, para determinar cuáles son los más adecuados y óptimos para implementar en una aplicación móvil. Esto con la finalidad de extender la API SMS/MMS para soportar otros formatos de mapas.

Relacionado con el punto anterior, analizar e implementar alguna técnica de compresión de imágenes para reducir el tamaño del archivo y hacer factible su uso en dispositivos móviles de capacidades limitadas.

El paquete mx.edu.cenidet.apismsmms.conexionmms se puede complementar con una clase para crear y enviar mensajes MMS, ya que actualmente sólo proporciona servicios para recepción y procesamiento del mensaje.

El servicio de conexión a Internet por HTTP se proporciona a través del método GET. Es posible desarrollar una función que soporte el envío de peticiones mediante el método POST. El método GET envía información a través de parámetros que se agregan al final de la URL, la longitud de este tipo de petición está limitada por el espacio libre en los buffers de entrada. Por esta razón, para enviar gran cantidad de información se recomienda el uso del método POST, en donde los datos se agregan en el cuerpo de un encabezado HTTP.

Los tipos de peticiones que se pueden enviar a un servidor de mapas son: GetCapabilities, GetMap y GetFeatureInfo. En este trabajo sólo es posible realizar la petición GetMap que permite obtener un mapa, por lo que se recomienda desarrollar los métodos para realizar las peticiones GetCapabilities y GetFeatureInfo. La primera permite obtener servicio de metadatos que proporciona información acerca de los valores de los parametros de petición que acepta el servidor de mapas y la segunda proporciona información a los clientes acerca de las características de las imágenes de mapas que devuelve el servidor.

Desarrollar la parte servidora de este trabajo, es decir, implementar un servidor de mapas que genere las respuestas de las consultas SMS y proporcione los mapas SVG Tiny que soporta la API SMS/MMS.

Page 93: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

REFERENCIAS

[CFT07] COFETEL - Comisión Federal de Telecomunicaciones. Crece 22.4% Sector

Telecomunicaciones. [En línea] México,1 junio 2007. [Citado el: 23 de junio de 2007]. <http://www.cft.gob.mx/wb/Cofetel_2008/Cofe_232007>.

[CFT08] COFETEL - Comisión Federal de Telecomunicaciones. Crece 36.4% el Sector de las Telecomunicaciones. [En línea] México, 26 de mayo de 2008. [Citado el: 13 de agosto de 2008]. <http://www.cft.gob.mx/wb/Cofetel_2008/Cofe_132008>.

[Compte07] Compte B. Marc, Molina G. Joseph, y Turbau M. Estel. d-Ruta, un sistema móvil de información turística. I Jornadas de SIG libre. Universitat de Girona. Plaça Ferrater i Mora, España. 2007.

[Devmobi] SVG & Mobile | dev.mobi. Dev.mobi Internet Made Mobile. [En línea] 30 de noviembre de 2007. [Citado el: 13 de abril de 2008]. <http://dev.mobi/article/svg-mobile>.

[DiFlora05] Di Flora C., Ficco M., Russo S., Vecchio V. Indoor an outdoor location based services for portable wireless devices. Proceedings of the 25th IEEE International Conference on Distributed Computing Systems Workshops (ICDCSW’05). 2005.

[Divya04] Divya M., Phan T. A. y Vun N. 2004. A J2ME based digital map system. Consumer Electronics, 2004 IEEE International Symposium on. Volume, Issue, 2004 Page(s):583 - 586. Digital Object Identifier 10. 1109/ISCE.2004.1376014.

[Garofalakis07] Garofalakis J. Papapoulias P. Plessas A. Representation of Classic MAPS for Mobile Devices. An Interactive Mobile Map Application. Personal, Indoor and Mobile Radio Communications, 2007. PIMRC 2007. IEEE 18th International Symposium on. Publication Date: 3-7 Sept. 2007. On page(s): 1-5. Athens. ISBN: 978-1-4244-1144-3. Digital Object Identifier: 10.1109/PIMRC.2007.4394855. Date Published in Issue: 2007-12-04 14:32:56.0.

[IEEEStd829]. IEEE Std. 829-1998. IEEE Standard for Software Test Documentation. Institute of Electrical and Electronics Engineers, Inc. Estados Unidos (1998).

[Jrs205] Java Community Process. JSR 205: Wireless Messaging API 2.0. [En línea]. [Citado el: 2 de abril de 2008]. <http://jcp.org/en/jsr/detail?id=205>.

[Jsr179] Java Community Process. JSR 179: Location API for J2ME. [En línea]. [Citado el 2 de abril de 2008]. <http://jcp.org/en/jsr/detail?id=179>.

[Jsr226] Java Community Process. JSR 226: Scalable 2D Vector Graphics API for J2ME. [En línea]. [Citado el 3 de abril de 2008]. <http://jcp.org/en/jsr/detail?id=226>.

[Kalinin03] Kalinin, Vadim y Rafalovich, Vladimir. Palm & Pocket PC Programming. Estados Unidos: Editorial A-List, 2003.

[Map24] Map24 Móvil – El mundo Map24 en tu bolsillo. Map24 México. [En línea] 2007. [Citado el: 10 de Noviembre de 2007]. <http://products.mx.map24.com/map24mobile.html>.

[MapSuite] ThinkGeo – Map Suite Pocket PC – Portable .NET Compact GIS Mapping Component for Mobile Devices. Map Suite. [En línea] ThinkGeo, 2007. [Citado el: 12 de Septiembre de

2007]. <http://thinkgeo.com/Default.aspx?tabid=313>. [Microsoft08] Dispositivos móviles de hoy en día: ¿Cuál le conviene? Microsoft Corporation. [En línea]

2008. [Citado el: 28 de Mayo de 2008]. <http://www.microsoft.com/mexico/pymes/themes/upgrade-your-technology/mobile-devices.mspx>.

[NLQ07] Xiaoqiu Le, Chongjun Yang, Wenyang Yu, Feixiang Chen. Natural language query interface in SMS/MMS-based spatial information service. Geoscience and Remote Sensing Symposium, 2005. IGARSS apos;05. Proceedings. 2005 IEEE International.Volume 3, Issue,

[Nokia07] Nokia Europe - MMS- Technologies. Nokia. [En línea] 2007. [Citado el: 22 de Abril de 2008]. <http://europe.nokia.com/A4172038>.

[OGC] Open Geospatial Consortium Inc. OGC® 06-042. Open Gis Web Map Server

Implementation Specification. 2006-03-15. [Citado el 28 de julio de 2008]. [Olivares06] Olivares Rojas J. Moviweb: Plataforma para soportar el acceso a sitios Web desde

dispositivos móviles. [Tesis de maestría]. Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET). Depto. de Ciencias Computacionales. Cuernavaca, Mor. México. 2006.

[OMA] Open Mobile Alliance. OMA-TS-MMS-CONF-V1_3. MMS Conformance Document, Candidate Version 1.3. [En línea] 2007. [Citado el: 7 de noviembre de 2007].

<http://www.openmobilealliance.org/release_program/docs/MMS/V1_3-20051027-C/OMA-TS-MMS-CONF-V1_3-20051027-C.pdf>.

Page 94: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Referencias

81

[OReilly] XML.com: Going Mobile with SVG: Standards. O’Reilly Media, Inc. [En línea]. [Citado el 23 de abril de 2008]. < http://www.xml.com/pub/a/2004/06/16/mobilesvg.html>.

[Ozi] The Official OziExplorer Web Site – GPS Mapping Software for Magellan, Garmin, Eagle, MLR Receivers. OziExplorer CE. [En línea] 2007. [Citado el: 20 de Septiembre de 2007.]

<http://www.oziexplorer.com/>. [Quiñonez07] Quiñónez Bernardino P. Gateway SMS Pull para Servicios Basados Localización con una

Arquitectura de Servicios Web. [Tesis de maestría]. Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET). Depto. de Ciencias Computacionales. Cuernavaca, Mor. México. 2007.

[Rabbany02] El-Rabbany Ahmed. Introduction to GPS The Global Positioning System. Estados Unidos de América: Artech House mobile communications series, 2002.

[Roldan05] Roldán David. Comunicaciones inalámbricas. México: Editorial Alfaomega, 2005. [Rosenbaum] Rosenbaum R., Tominski C. Institute for Computer Graphics University of Rostock. Pixels vs.

Vectors: Presentation of Large Images on Mobile Devices. [En línea]. [Citado el 1 de noviembre de 2007]. <http://www.informatik.uni-rostock.de/~ct/Publications/imc.pdf>.

[Ruiz07] Ruiz Guerra L. API SMS para el procesamiento de consultas georeferenciadas/no georeferenciadas. [Tesis de maestría]. Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET). Depto. de Ciencias Computacionales. Cuernavaca, Mor. México. 2007.

[Sun08] Java ME Technology. Sun Microsystem. [En línea] 2008. [Citado el: 8 de Marzo de 2008]

<http://java.sun.com/javame/technology/index.jsp#top>. [TechTerms] API (Aplication Program Interface) Definition. TechTerms.com. [En línea]. [Citado el: 9 de

Junio de 2008]. <http://www.techterms.com/definition/api>. [Telefonica07] Telefonica's International Corporate. Mensajería Multimedia. Telefónica.es. [En línea]

España, 2007. [Citado el: 20 de abril de 2007]. <http://www.telefonica.es/sociedaddelainformacion/pdf/publicaciones/movilidad/capitulo_15.pdf>.

[Thurwachter02] Thurwachter Jr., Charles N. Wireless Networking. Estados Unidos de América: Editorial

Prentice Hall, 2002. [Vazquez05] Vázquez Juan I., Lago Ana B., Larizgoitia Iker, Uria Ignacio, Bañales Rafael. WALLIP: Una

plataforma de servicios con percepción contextual basada en localización. Ubiquitous Computing & Ambient Intelligence. CEDI 2005. Granada, España. Septiembre de 2005.

[W3C08] Scalable Vector Graphics (SVG). W3C. [En línea] 26 de Mayo de 2008. [Citado el: 9 de Junio de 2008]. <http://www.w3.org/Graphics/SVG/>

[Whatis] What is application program interface? - a definition from Whatis.com. SearchExchange.com. Thomas Li. [En línea] 16 de Febrero de 2004. [Citado el: 9 de Junio de 2008]. <http://searchexchange.techtarget.com/sDefinition/0,,sid43_gci213778,00.html>.

[Wiki07a] Gráfico vectorial. Wikipedia, la enciclopedia libre. [En línea] 2007. [Citado el: 4 de Marzo de 2007]. <http://es.wikipedia.org/wiki/Gr%C3%A1fico_vectorial>.

[Wiki07b] Gráfico rasterizado. Wikipedia, la enciclopedia libre. [En línea] 2007. [Citado el: 4 de Marzo de 2007]. <http://es.wikipedia.org/wiki/Gr%C3%A1ficos_rasterizados>.

[Wiki08a] Telefonía móvil. Wikipedia, la enciclopedia libre. [En línea] 7 de Junio de 2008. [Citado el: 8 de Junio de 2008]. <http://es.wikipedia.org/wiki/Telefon%C3%ADa_m%C3%B3vil>.

Page 95: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ANEXO A DOCUMENTACIÓN DE LA

API Documentación Java de la API SMS/MMS.

Page 96: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

83

A.1 Paquete mx.edu.cenidet.apismsmms.conexionhttp mx.edu.cenidet.apismsmms.conexionhttp

Class ConexionHTTP java.lang.Object

mx.edu.cenidet.apismsmms.conexionhttp.ConexionHTTP

public class ConexionHTTP

extends java.lang.Object

Crea una conexión HttpConnection de tipo READ_WRITE para enviar y recibir datos a través del

protocolo HTTP.

Constructor Summary

ConexionHTTP()

Crea una nueva instancia ConexionHTTP.

Method Summary

int abrirConexionHttp(java.lang.String url)

Abre una conexión Http a una URL específica.

void cerrarConexionHttp()

Cierra la conexión Http activa.

byte[] enviarPeticion()

Envía una petición GET a la URL de la conexión abierta.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

ConexionHTTP public ConexionHTTP()

Crea una nueva instancia ConexionHTTP.

Method Detail

abrirConexionHttp public int abrirConexionHttp(java.lang.String url)

throws ConexionHTTPException

Abre una conexion Http a una URL específica. El método de petición que se establece para la

URL es GET.

Parameters:

url - Es la dirección Web para la conexión.

Returns:

Page 97: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

84

El código de estado HTTP para la conexion especificada o -1 si no es posible conocerlo. Ejemplo: EL código 200 representa el estado HTTP/1.0 200 OK.

Throws: ConexionHTTPException

enviarPeticion public byte[] enviarPeticion()

Envía una petición GET a la URL de la conexión abierta.

Returns: Un arreglo de bytes que representa el recurso solicitado

cerrarConexionHttp public void cerrarConexionHttp()

throws ConexionHTTPException

Cierra la conexion Http activa.

Throws: ConexionHTTPException

mx.edu.cenidet.apismsmms.conexionhttp

Class PropiedadesGETMap java.lang.Object

mx.edu.cenidet.apismsmms.conexionhttp.PropiedadesGETMap

public class PropiedadesGETMap

extends java.lang.Object

Los parametros que se utilizan para enviar una petición GETMAP a un servidor de mapas se definen

con los valores de esta clase.

Es responsabilidad de la aplicación proporcionar los valores correctos para formar la URL de petición.

Una instancia de PropiedadesGETMap se utiliza por una aplicación para indicar los valores de los

parámetros de la petición GETMAP de acuerdo a la especificación que Open Geospatial Consortium

(OGC) establece en el documento OpenGIS Web Map Server Implementation Specification versión

1.3.0 para implementar servidores de mapas Web.

Los parametros para la petición GETMAP que define esta clase son:

1. VERSION=1.3.0 (Obligatorio). Versión de la petición.

2. REQUEST=GetMap (Obligatorio). Nombre de la petición.

3. LAYERS=lista_capas (Obligatorio). Lista de una o más capas separadas por el signo ",".

4. STYLES=lista_estilos (Obligatorio). Lista separada por "," de un estilo de representación por

capa solicitada.

5. CRS=namespace:identificador (Obligatorio). Sistema de referencia de coordenadas.

6. BBOX=minx,miny,maxx,maxy (Obligatorio). Esquinas del cuadro delimitador (inferior

izquierda, superior derecha) en unidades CRS.

7. WIDTH=ancho_salida (Obligatorio). Ancho en píxeles de la imagen del mapa.

8. HEIGHT=alto_salida (Obligatorio). Alto en píxeles de la imagen del mapa.

9. FORMAT=formato_salida (Obligatorio). Formato de salida del mapa.

Page 98: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

85

10. TRANSPARENT=TRUE|FALSE (Opcional). Transparencia del fondo del mapa

(default=FALSE).

11. BGCOLOR=valor_color (Opcional). Valor hexadecimal para el color de fondo

(default=0xFFFFFF).

Los valores default que define la clase se pueden obtener mediante una llamada al método

imprimirPropiedadesGETMap

Es posible cambiar los valores default a través de los métodos que proporciona para cada uno de los

parámetros.

Constructor Summary

PropiedadesGETMap()

Crea una nueva instancia de PropiedadesGETMap.

Method Summary

java.lang.String getRequest()

Retorna el valor de la URL con los parametros configurados en esta

clase.

java.lang.String getURL()

Retorna la URL de la petición.

void imprimirPropiedadesGETMAP()

Imprime los valores default de la instancia PropiedadesGETMap para

los parametros de la petición GetMap.

void setBBox(java.lang.String bbox)

Establece los valores para solicitar un rectángulo limitado particular.

void setBGColor(java.lang.String bgcolor)

Establece el valor para especificar el color a usar como fondo del mapa.

void setCRS(java.lang.String crs)

Establece el parámetro de petición CRS, define que sistema de

referencia de coordenadas aplica para el parámetro BBOX.

void setDefaultValues()

Establece los valores default que se definen cuando se crea la instancia

PropiedadesGETMap.

void setFormat(java.lang.String format)

Establece el valor para especificar el formato del mapa a solicitar.

void setHeight(java.lang.String height)

Establece el valor para especificar el alto en píxeles del mapa a

solicitar.

void setLayers(java.lang.String layers)

Establece la lista de capas que regresará la petición.

void setRequest(java.lang.String request)

Page 99: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

86

Establece el tipo de petición a solicitar.

void setStyles(java.lang.String styles)

Establece la lista de estilos de cada una de las capas a representar.

void setTransparent(java.lang.String transparent)

Establece el valor para especificar si el fondo del mapa será

transparente o no.

void setUrl(java.lang.String url)

Establece el valor para la URL.

void setVersion(java.lang.String version)

Establece la versión de la especificación que implementa el mapa.

void setWidth(java.lang.String width)

Establece el valor para especificar el ancho en píxeles del mapa a

solicitar.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

PropiedadesGETMap public PropiedadesGETMap()

Crea una nueva instancia de PropiedadesGETMap.

Method Detail

imprimirPropiedadesGETMAP public void imprimirPropiedadesGETMAP()

Imprime los valores default de la instancia PropiedadesGETMap para los parametros de la

petición GetMap.

getRequest public java.lang.String getRequest()

Retorna el valor de la URL con los parametros configurados en esta clase.

Returns: Una cadena que representa la URL con los parametros necesarios para la petición GetMap

getURL public java.lang.String getURL()

Retorna la URL de la petición.

Returns: La URL que forma parte de la petición GetMap

Page 100: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

87

setUrl public void setUrl(java.lang.String url)

Establece el valor para la URL

Parameters: url - Es la URL del servidor de mapas.

setVersion public void setVersion(java.lang.String version)

Establece la versión de la especificación que implementa el mapa.

Parameters:

version - Es el valor del parámetro VERSION para la petición GetMap.

setRequest public void setRequest(java.lang.String request)

Establece el tipo de petición a solicitar.

Parameters:

request - Es el valor del parámetro REQUEST para la petición, esta clase sólo soporta el tipo

GetMap.

setLayers public void setLayers(java.lang.String layers)

Establece la lista de capas que regresará la petición.

Parameters:

layers - Es una lista de capas para el parámetro LAYERS de la petición GetMap.

setStyles public void setStyles(java.lang.String styles)

Establece la lista de estilos de cada una de las capas a representar.

Parameters:

styles - Es una lista de estilos para el parámetro STYLES de la petición GetMap.

setCRS public void setCRS(java.lang.String crs)

Establece el parámetro de petición CRS, define que sistema de referencia de coordenadas

aplica para el parámetro BBOX.

Parameters:

crs - Es el valor del parámetro CRS para la petición GetMap.

setBBox public void setBBox(java.lang.String bbox)

Establece los valores para solicitar un rectángulo limitado particular. Es una cadena que

contiene una lista de números reales separados por coma en la forma "minx,miny,maxx,maxy".

Estos números especifican los valores X mínima, Y mínima, X máxima y Y máxima de una

región en la capa CRS de la petición.

Parameters:

bbox - Es el valor del parámetro BBOX para la petición GetMap.

Page 101: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

88

setWidth public void setWidth(java.lang.String width)

Establece el valor para especificar el ancho en píxeles del mapa a solicitar.

Parameters:

width - Es el valor del parámetro WIDTH para la petición GetMap.

setHeight public void setHeight(java.lang.String height)

Establece el valor para especificar el alto en píxeles del mapa a solicitar.

Parameters:

height - Es el valor del parámetro HEIGHT para la petición GetMap.

setFormat public void setFormat(java.lang.String format)

Establece el valor para especificar el formato del mapa a solicitar.

Parameters:

format - Es el valor del parámetro FORMAT para la petición GetMap.

setTransparent public void setTransparent(java.lang.String transparent)

Establece el valor para especificar si el fondo del mapa será transparente o no.

Parameters:

transparent - Es el valor del parámetro TRANSPARENT para la petición GetMap.

setBGColor public void setBGColor(java.lang.String bgcolor)

Establece el valor para especificar el color a usar como fondo del mapa.

Parameters:

bgcolor - Es el valor del parámetro BGCOLOR para la petición GetMap.

setDefaultValues public void setDefaultValues()

Establece los valores default que se definen cuando se crea la instancia PropiedadesGETMap.

mx.edu.cenidet.apismsmms.conexionhttp

Class ConexionHTTPException java.lang.Object

java.lang.Throwable

java.lang.Exception

mx.edu.cenidet.apismsmms.conexionhttp.ConexionHTTPException

public class ConexionHTTPException

extends java.lang.Exception

Page 102: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

89

Clase para manejo de excepciones si no es posible abrir o cerrar la conexión HTTP.

Constructor Summary

ConexionHTTPException(java.lang.String error)

Method Summary

Methods inherited from class java.lang.Throwable

getMessage, printStackTrace, toString

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, wait, wait, wait

Constructor Detail

ConexionHTTPException public ConexionHTTPException(java.lang.String error)

Parameters:

error - Es una cadena que contiene el mensaje de error generado.

A.2 Paquete mx.edu.cenidet.apismsmms.conexionmms

mx.edu.cenidet.apismsmms.conexionmms

Class ConexionMensajes java.lang.Object

mx.edu.cenidet.apismsmms.conexionMms.ConexionMensajes

public class ConexionMensajes

extends java.lang.Object

Clase para crear un objeto ConexionMensajes para abrir y cerrar una conexión de tipo

MessageConnection que permite a las aplicaciones enviar y recibir mensajes.

Constructor Summary ConexionMensajes()

Crea una nueva instancia ConexionMensajes.

Page 103: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

90

Method Summary javax.wireless.messaging.Mes

sageConnection abrirConexion(java.lang.String url)

Abre una conexión de tipo MessageConnection para

enviar y recibir mensajes en una aplicación.

void cerrarConexion(javax.wireless.messaging.MessageConnection msgCon) Cierra una conexión MessageConnection.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

ConexionMensajes public ConexionMensajes()

Crea una nueva instancia ConexionMensajes

Method Detail

abrirConexion public javax.wireless.messaging.MessageConnection

abrirConexion(java.lang.String url)

throws ConexionException

Abre una conexión de tipo MessageConnection para enviar y recibir mensajes en una

aplicación. La conexión se puede abrir en modo servidor o cliente. Una conexión en modo

servidor se abre proporcionando una URL que especifique un identificador para una aplicación

en el dispositivo local para mensajes de entrada, ejemplos:

mms://:5004

mms://:mx.edu.cenidet.MiAplicacionMMS

Una conexión en modo cliente se abre al proporcionar una URL que apunte a otro dispositivo.

Este tipo de conexión sólo puede enviar mensajes, ejemplos:

sms://+5551234567:5004

mms://+5551234567:mx.edu.cenidet.MiAplicacionMMS

Parameters:

url - Es la URL cliente o servidor para la conexión.

Returns: El objeto que representa la conexion MessageConnection a la URL especificada.

Throws:

ConexionException - ConnectionNotFoundException si la conexión destino no se encuentra o no soporta el

protocolo.

IllegalArgumentException si el tipo de parametro no es válido o si intenta crear un *Stream.

IOException si el número de puerto o el identificador de la aplicación ya se encuentran

reservados o la conexión se ha cerrado.

SecurityException si se ha denegado el permiso para abrir la conexión o cuando se establece

Page 104: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

91

un MessageListener, se determinó que la aplicación no tiene permiso para recibir en el puerto

especificado.

cerrarConexion public void

cerrarConexion(javax.wireless.messaging.MessageConnection msgCon)

throws ConexionException

Cierra una conexión MessageConnection.

Parameters:

msgCon - Es un objeto que representa la conexión a cerrar.

Throws:

@throws - mx.edu.cenidet.apismsmms.conexionmms.ConexionException si no existe la

conexión u ocurre algún error durante el proceso. ConexionException

mx.edu.cenidet.apismsmms.conexionmms Class ReceptorMensajes java.lang.Object

mx.edu.cenidet.apismsmms.conexionmms.ReceptorMensajes

public class ReceptorMensajes

extends java.lang.Object

La clase ReceptorMensajes proporciona métodos para recibir y procesar mensajes.

Los tipos de mensajes que define y soporta la clase son: "Texto", "Binario" y "Multimedia".

El tipo de mensaje recibido se puede conocer mediante una llamada al método leerTipoMensaje.

Constructor Summary

ReceptorMensajes()

Crea una nueva instancia de ReceptorMensajes.

Method Summary

java.lang.String descripcionMMS()

Retorna una cadena con información descriptiva del mensaje

MMS: Asunto Contenido Tamaño (bytes) MIMEType Codificación

java.lang.String leerTipoMensaje()

El tipo de mensaje recibido permitirá definir que método

invocar para procesar correctamente el mensaje.

byte[] procesarMensajeMMS(javax.wireless.messaging.Message mensaje) Procesa un mensaje de tipo "Multimedia".

Page 105: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

92

java.lang.String procesarMensajeSMS(javax.wireless.messaging.Message mensaje)

Procesa un mensaje SMS y retorna su contenido.

javax.wireless.messagin

g.Message recibirMensaje(javax.wireless.messaging.MessageCon

nection msgConex)

Recibe un mensaje.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

ReceptorMensajes public ReceptorMensajes()

Crea una nueva instancia de ReceptorMensajes.

Method Detail

recibirMensaje public javax.wireless.messaging.Message

recibirMensaje(javax.wireless.messaging.MessageConnection msgConex)

Recibe un mensaje.

Parameters:

msgConex - Es un objeto MessageConnection que contiene el mensaje de entrada.

Returns: El mensaje recibido o null si la conexión no contiene ningún mensaje

procesarMensajeSMS public java.lang.String

procesarMensajeSMS(javax.wireless.messaging.Message mensaje)

Procesa un mensaje SMS y retorna su contenido. Los tipos de mensajes que procesa son:

"Texto" y "Binario".

Si se trata de un mensaje de tipo "Binario", el método retorna el contenido en formato

hexadecimal, la aplicación deberá implementar la conversión a texto normal.

Parameters:

mensaje - Es un objeto que representa un mensaje SMS.

Returns: El contenido del mensaje SMS

procesarMensajeMMS public byte[] procesarMensajeMMS(javax.wireless.messaging.Message mensaje)

Procesa un mensaje de tipo "Multimedia". El mensaje MMS debe constar de una sola parte, es

decir, sólo debe contener un archivo adjunto. El contenido se retornará en un arreglo de bytes,

la aplicación deberá implementar la forma de mostrarlo correctamente en el dispositivo.

Parameters:

mensaje - Es un objeto que representa un mensaje MMS.

Page 106: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

93

Returns: Un arreglo de bytes que representa contenido del mensaje MMS

descripcionMMS public java.lang.String descripcionMMS()

Retorna una cadena con información descriptiva del mensaje MMS:

Asunto

Contenido

Tamaño (bytes)

MIMEType

Codificación

Returns: Información que describe de manera general el mensaje MMS recibido

leerTipoMensaje public java.lang.String leerTipoMensaje()

El tipo de mensaje recibido permitirá definir que método invocar para procesar correctamente

el mensaje.

Si se trata de un mensaje SMS el tipo puede ser "Texto" o "Binario". Para procesar el mensaje

se deberá invocar el método procesarMensajeSMS(Message mensaje).

Si se trata de un mensaje MMS el tipo es "Multimedia". Para procesar el mensaje se deberá

invocar el método procesarMensajeMMS(Message mensaje).

Returns: El tipo de mensaje recibido

mx.edu.cenidet.apismsmms.conexionmms Class ConexionException java.lang.Object

java.lang.Throwable

java.lang.Exception

mx.edu.cenidet.apismsmms.conexionmms.ConexionException

public class ConexionException

extends java.lang.Exception

ConexionException se genera cuando ocurre un error relacionado con la apertura o cierre de la

conexión MessageConnection de la clase ConexionMensajes.

Constructor Summary

ConexionException(java.lang.String error)

Crea una nueva instancia de ConexionException

Page 107: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

94

Method Summary

Methods inherited from class java.lang.Throwable

getMessage, printStackTrace, toString

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, wait, wait, wait

Constructor Detail

ConexionException public ConexionException(java.lang.String error)

Crea una nueva instancia de ConexionException

A.3 Paquete mx.edu.cenidet.apismsmms.localizacionmovil mx.edu.cenidet.apismsmms.localizacionmovil

Class Localizacion java.lang.Object

mx.edu.cenidet.apismsmms.localizacionmovil.Localizacion

public class Localizacion

extends java.lang.Object

La clase Localizacion representa información básica de localización: Latitud, Longitud y Altitud.

Constructor Summary Localizacion()

Crea una nueva instancia de Localizacion.

Method Summary

void Geoposicion(boolean costAllowed, int precision)

Obtiene información de localización de acuerdo al criterio de búsqueda que se define

por los parámetros que recibe el método.

float leeAltitud()

Retorna el componente Altitud de la información de localización obtenida.

double leeLatitud()

Retorna el componente Latitud de la información de localización obtenida.

double leeLongitud()

Page 108: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

95

Retorna el componente Longitud de la información de localización obtenida.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

Localizacion public Localizacion()

Crea una nueva instancia de Localizacion.

Method Detail

Geoposicion public void Geoposicion(boolean costAllowed,

int precision)

throws LocalizacionException

Obtiene información de localización de acuerdo al criterio de búsqueda que se define por los

parámetros que recibe el método.

Parameters:

costAllowed - Establece la configuración de costo.

Establece si la petición para determinar la localización permitirá incurrir en algún costo para el

usuario del dispositivo móvil.

Si se establece a true se permitirá un método por costo, false si no se permitirá determinar la

localización con algún costo.

precision - La exactitud de localización preferida en metros.

Throws: LocalizacionException

leeLatitud public double leeLatitud()

Retorna el componente Latitud de la información de localización obtenida.

Returns: latitud en metros

leeLongitud public double leeLongitud()

Retorna el componente Longitud de la información de localización obtenida.

Returns: longitud en metros

leeAltitud public float leeAltitud()

Retorna el componente Altitud de la información de localización obtenida.

Returns: altitud en metros

Page 109: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

96

mx.edu.cenidet.apismsmms.localizacionmovil Class LocalizacionException java.lang.Object

java.lang.Throwable

java.lang.Exception

mx.edu.cenidet.apismsmms.localizacionmovil.LocalizacionException

public class LocalizacionException

extends java.lang.Exception

La clase LocalizacionException se lanza cuando ocurre un error relacionado con la búsqueda de un

proveedor de localización.

Constructor Summary

LocalizacionException(java.lang.String error)

Crea una excepción LocalizacionException con el mensaje de error.

Method Summary

Methods inherited from class java.lang.Throwable

getMessage, printStackTrace, toString

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, wait, wait, wait

Constructor Detail

LocalizacionException public LocalizacionException(java.lang.String error)

Crea una excepción LocalizacionException con el mensaje de error.

Parameters:

error - El mensaje generado.

Page 110: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

97

A.4 Paquete mx.edu.cenidet.apismsmms.mapasvg mx.edu.cenidet.apismsmms.mapasvg

Class AgregarElementosSVG java.lang.Object

mx.edu.cenidet.apismsmms.mapasvg.AgregarElementosSVG

public class AgregarElementosSVG

extends java.lang.Object

La clase AgregarElementosSVG define métodos para agregar nuevos elementos a una imagen SVG

Tiny como puntos, líneas y texto.

Estos elementos permiten representar puntos de interés y caminos en un mapa.

Constructor Summary

AgregarElementosSVG() Crea una nueva instancia de AgregarElementosSVG.

Method Summary

void dibujarCamino(javax.microedition.m2g.SVGImage imgSVG, java.lang.String cadena)

Representa un camino sobre un mapa SVG Tiny.

void dibujarLinea(javax.microedition.m2g.SVGImage imgSVG, float x1, float y1, float x2, float y2)

Agrega una línea a una imagen SVG Tiny.

void dibujarPunto(javax.microedition.m2g.SVGImage imgSVG, float x, float y,

java.lang.String idPunto,

java.lang.String etiqueta,

java.lang.String idTexto)

Agrega un punto (circulo) a una imagen SVG Tiny para

representar un punto de interés.

void dibujarTexto(javax.microedition.m2g.SVGImage imgSVG, float x, float y,

java.lang.String idTexto,

java.lang.String texto)

Agrega un texto a una imagen SVG Tiny.

javax.microedition.m2g.SVGI

mage obtenerImagen() Retorna la imagen SVG con los nuevos elementos agregados.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Page 111: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

98

Constructor Detail

AgregarElementosSVG public AgregarElementosSVG()

Crea una nueva instancia de AgregarElementosSVG.

Method Detail

dibujarPunto public void dibujarPunto(javax.microedition.m2g.SVGImage imgSVG,

float x,

float y,

java.lang.String idPunto,

java.lang.String etiqueta,

java.lang.String idTexto)

Agrega un punto (circulo) a una imagen SVG Tiny para representar un punto de interés.

El punto se identificará mediante un id y éste debe ser único. Si el id proporcionado ya existe,

no será posible agregar el elemento a la imagen.

Parameters:

imgSVG - La imagen del mapa SVG en donde se dibujará el nuevo punto.

x - La coordenada X que define la ubicación del punto en el eje de las abcisas.

y - La coordenada Y que define la ubicación del punto en el eje de las ordenadas.

idPunto - El identificador único para el punto a agregar.

etiqueta - Una cadena que describe el punto.

idTexto - El identificador único para la etiqueta que describirá el punto.

dibujarTexto public void dibujarTexto(javax.microedition.m2g.SVGImage imgSVG,

float x,

float y,

java.lang.String idTexto,

java.lang.String texto)

Agrega un texto a una imagen SVG Tiny.

Parameters:

imgSVG - La imagen del mapa SVG en donde se agregará el texto.

x - La coordenada X que define la ubicación del texto en el eje de las abcisas.

y - La coordenada Y que define la ubicación del texto en el eje de las ordenadas.

idTexto - El identificador único para el texto a agregar.

texto - La cadena que contiene el texto a representar.

dibujarLinea public void dibujarLinea(javax.microedition.m2g.SVGImage imgSVG,

float x1,

float y1,

float x2,

float y2)

Agrega una línea a una imagen SVG Tiny.

Parameters:

imgSVG - La imagen del mapa SVG en donde se dibujará la línea.

Page 112: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

99

x1 - La coordenada X1 que define el punto inicial de la línea en el eje de las abcisas.

y1 - La coordenada Y1 que define el punto final de la línea en el eje de las ordenadas.

x2 - La coordenada X2 que define el punto inicial de la línea en el eje de las abcisas.

y2 - La coordenada Y2 que define el punto final de la línea en el eje de las ordenadas.

dibujarCamino public void dibujarCamino(javax.microedition.m2g.SVGImage imgSVG,

java.lang.String cadena)

Representa un camino sobre un mapa SVG Tiny. Los elementos que agrega a la imagen son un

conjunto de líneas.

El camino se define mediante una cadena de la forma: "x1,y1;x2,y2;x3,y3;xn,yn;

Las coordenadas se separan por el símbolo "," y cada par ordenado por el símbolo ";".

Parameters:

imgSVG - La imagen del mapa SVG en donde se dibujará el camino.

cadena - El conjunto de coordenadas que definen los puntos x,y del camino a trazar.

obtenerImagen public javax.microedition.m2g.SVGImage obtenerImagen()

Retorna la imagen SVG con los nuevos elementos agregados.

Returns: La imagen SVG modificada por los métodos de la clase AgregarElementosSVG

mx.edu.cenidet.apismsmms.mapasvg Class CanvasSVG java.lang.Object

javax.microedition.lcdui.Displayable

javax.microedition.lcdui.Canvas

mx.edu.cenidet.apismsmms.mapasvg.CanvasSVG

public class CanvasSVG

extends javax.microedition.lcdui.Canvas

Representa una imagen SVG en un objeto Canvas lista para mostrarse en el dispositivo móvil.

Field Summary

Fields inherited from class javax.microedition.lcdui.Canvas

DOWN, FIRE, GAME_A, GAME_B, GAME_C, GAME_D, KEY_NUM0, KEY_NUM1, KEY_NUM2,

KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9,

KEY_POUND, KEY_STAR, LEFT, RIGHT, UP

Page 113: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

100

Constructor Summary

CanvasSVG(javax.microedition.m2g.ScalableImage inImage)

Define el área en donde se representará un gráfico SVG para mostrarlo.

Method Summary

void paint(javax.microedition.lcdui.Graphics g)

Representa el gráfico SVG a mostrar.

Methods inherited from class javax.microedition.lcdui.Canvas

getGameAction, getKeyCode, getKeyName, hasPointerEvents,

hasPointerMotionEvents, hasRepeatEvents, hideNotify, isDoubleBuffered,

keyPressed, keyReleased, keyRepeated, pointerDragged, pointerPressed,

pointerReleased, repaint, repaint, serviceRepaints, setFullScreenMode,

showNotify, sizeChanged

Methods inherited from class javax.microedition.lcdui.Displayable

addCommand, getHeight, getTicker, getTitle, getWidth, isShown,

removeCommand, setCommandListener, setTicker, setTitle

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

CanvasSVG public CanvasSVG(javax.microedition.m2g.ScalableImage inImage)

Define el área en donde se representará un gráfico SVG para mostrarlo.

Parameters:

inImage - El gráfico SVG a representar.

Method Detail

paint public void paint(javax.microedition.lcdui.Graphics g)

Representa el gráfico SVG a mostrar.

Specified by:

paint in class javax.microedition.lcdui.Canvas

Parameters:

g - Instancia del gráfico a representar.

Page 114: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

101

mx.edu.cenidet.apismsmms.mapasvg

Class ImagenSVG java.lang.Object

mx.edu.cenidet.apismsmms.mapasvg.ImagenSVG

public class ImagenSVG

extends java.lang.Object

Proporciona métodos para cargar una imagen SVG en el dispositivo móvil e interactuar con ésta.

Constructor Summary

ImagenSVG()

Method Summary

javax.microedition.lcdui.Canva

s cargarMapa(java.io.ByteArrayInputStream map

a) Carga una imagen SVG en el dispositivo por medio

de un ByteArayInputStream que representa la imagen.

javax.microedition.lcdui.Canva

s cargarMapa(java.lang.String mapa)

Carga una imagen SVG en el dispositivo

especificando su ubicación.

javax.microedition.m2g.SVGImag

e getMapa() Retorna una imagen SVG.

void restablecerMapa()

Restablece el tamaño original de la imagen SVG.

void zoom(float delta)

Aplica una transformación a la imagen SVG: zoom-

in o zoom-out, dependiendo del valor del parámetro.

Methods inherited from class java.lang.Object

equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

ImagenSVG public ImagenSVG()

Page 115: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo A

102

Method Detail

cargarMapa public javax.microedition.lcdui.Canvas cargarMapa(java.lang.String mapa)

Carga una imagen SVG en el dispositivo especificando su ubicación.

Parameters:

mapa - La imagen SVG a cargar.

Returns: Retorna un objeto Canvas que contiene la imagen SVG a mostrar.

cargarMapa public javax.microedition.lcdui.Canvas

cargarMapa(java.io.ByteArrayInputStream mapa)

Carga una imagen SVG en el dispositivo por medio de un ByteArayInputStream que

representa la imagen.

Parameters:

mapa - La imagen SVG a cargar.

Returns: Retorna un objeto Canvas que contiene la imagen SVG a mostrar.

zoom public void zoom(float delta)

Aplica una transformación a la imagen SVG: zoom-in o zoom-out, dependiendo del valor del

parámetro.

Si el valor es positivo, la operación a realizar es zoom-in.

Si el valor es negativo, la operación a realizar es zoom-out.

Parameters:

delta - El nivel de zoom a aplicar sobre la imagen SVG.

restablecerMapa public void restablecerMapa()

Restablece el tamaño original de la imagen SVG.

getMapa public javax.microedition.m2g.SVGImage getMapa()

Retorna una imagen SVG.

Returns: La imagen SVG que se representó en el Canvas que devuelve el método cargarMapa.

Page 116: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ANEXO B APLICACIONES DE

PRUEBA Código fuente de las aplicaciones utilizadas para realizar las pruebas de la API SMS/MMS.

Page 117: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

104

B.1 Código fuente del MIDlet del caso de prueba APISMSMMS-01-01 // QGeoUbicacion.java package Consulta_Geo_Ubicacion; import Consulta_NoGeo_Ubicacion.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.PoiGeoreferenciado; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QGeoUbicacion extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; public List menu; private Command salir; private Form formDatos; private TextField telefono; private ChoiceGroup palabra; private ChoiceGroup distancia; private TextField cantidad; private Command enviar; private Command regresar; private ChoiceGroup mapa; private String latitud="18.876709"; private String longitud="-99.219766"; private PoiGeoreferenciado poigeo; public QGeoUbicacion(){ // Menú principal display=Display.getDisplay(this); menu = new List("Consulta Georeferenciada", Choice.IMPLICIT, new String[] { "Buscar GPS", "Envia Consulta" }, new Image[] { null, null }); salir=new Command("Salir",Command.EXIT,1); menu.addCommand(salir); menu.setCommandListener(this); menu.setSelectedFlags(new boolean[] { true, false }); // botones regresar=new Command("Regresar",Command.BACK,1); enviar= new Command("Enviar", Command.ITEM, 1); // Form captura datos consulta String opciones[] = {"Todos","Taxi","Pasteleria", "MSuper","Gym","Escuela","Video","Farmacia", "Hotel","Banco","Bus","Cine","Hospital","Restaurante","SMercado"};

String distancias[] = {"50","100","150","200","250","300","350","400",

"450","500","1000","1500","2000","2500","3000"}; String opcmapa[] = {"Si", "No"}; formDatos= new Form("Datos de la consulta"); telefono=new

TextField("Teléfono",null,10,TextField.PHONENUMBER); palabra= new

ChoiceGroup("Palabra",Choice.POPUP,opciones,null); distancia= new

ChoiceGroup("Distancia",Choice.POPUP,distancias,null); cantidad=new TextField("Num de respuestas deseada", null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa:", Choice.POPUP,

opcmapa, null);

formDatos.append(telefono); formDatos.append(palabra); formDatos.append(distancia); formDatos.append(cantidad); formDatos.append(mapa); formDatos.append(new StringItem("Latitud",latitud)); formDatos.append(new StringItem("Longitud",longitud)); mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(regresar); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(menu); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable

displayable) { if (displayable == menu) { if (command == menu.SELECT_COMMAND) { switch (menu.getSelectedIndex()) { case 0:{ break; } case 1: display.setCurrent(formDatos); break; } } else if (command==salir){ destroyApp(true); notifyDestroyed(); } } if (command==regresar){ display.setCurrent(menu); } } public void commandAction(Command command, Item item) { if(command==enviar){ int num_resp=Integer.parseInt(cantidad.getString()); String tel=telefono.getString(); poigeo=new PoiGeoreferenciado(); poigeo.EscribeLatitudG(latitud); poigeo.EscribeLongitudG(longitud); poigeo.EscibeClasif(palabra.getString( palabra.getSelectedIndex()).toUpperCase()); poigeo.EscribeDistancia(distancia.getString( distancia.getSelectedIndex())); if(mapa.getSelectedIndex()==0) poigeo.EscribeMapa(true); EnviarSMS enviar=new EnviarSMS(this,tel,num_resp,poigeo); } } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); }

}

B.2 Código fuente del MIDlet del caso de prueba APISMSMMS-01-02

// QCaminoGeo_Geo.java package Consulta_Camino_Geo_Geo; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.PoiGeoreferenciado; import mx.edu.cenidet.apisms.dato.Camino; import mx.edu.cenidet.apisms.trama.*;

/** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QCaminoGeo_Geo extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; private Form formDatos; private Command enviar; private Command salir;

Page 118: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

105

private ChoiceGroup mapa; private TextField telefono; private TextField latitud_ini; private TextField latitud_fin; private TextField longitud_ini; private TextField longitud_fin; private TextField cantidad; private PoiGeoreferenciado poigeo_ini, poigeo_fin; private Camino camino; private Mensaje msj; public QCaminoGeo_Geo(){ display=Display.getDisplay(this); formDatos= new Form("Datos de la consulta"); String opcmapa[] = {"Si", "No"}; telefono= new TextField("telefono",null,30,TextField.NUMERIC); latitud_ini= new TextField("Latitud",null,30,TextField.DECIMAL); latitud_fin= new TextField("Latitud",null,30,TextField.DECIMAL); longitud_ini= new TextField("Longitud",null,30,TextField.ANY); longitud_fin= new TextField("Longitud",null,30,TextField.ANY); cantidad=new TextField("Num de respuestas deseada", null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa:", Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append("PUNTO INICIAL"); formDatos.append(latitud_ini); formDatos.append(longitud_ini); formDatos.append("PUNTO FINAL"); formDatos.append(latitud_fin); formDatos.append(longitud_fin); formDatos.append(cantidad); formDatos.append(mapa); mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) {

} public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poigeo_ini=new PoiGeoreferenciado(); poigeo_fin=new PoiGeoreferenciado(); poigeo_ini.EscribeLatitudG(latitud_ini.getString()); poigeo_ini.EscribeLongitudG(longitud_ini.getString()); poigeo_fin.EscribeLatitudG(latitud_fin.getString()); poigeo_fin.EscribeLongitudG(longitud_fin.getString()); if(mapa.getSelectedIndex()==0) poigeo_ini.EscribeMapa(true); camino=new Camino(Camino.INI_GEO__FIN_GEO); camino.QueryCamino(poigeo_ini,poigeo_fin); msj=new Mensaje(Mensaje.Q_CAMINO_GEO_GEO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(camino); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace(); MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.3 Código fuente del MIDlet del caso de prueba APISMSMMS-01-03

// QCaminoGeo_NoGeo.java package Consulta_Camino_Geo_NoGeo; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.*; import mx.edu.cenidet.apisms.trama.*; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QCaminoGeo_NoGeo extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; private Form formDatos; private Command enviar; private Command salir; private TextField telefono; private TextField latitud_ini; private TextField longitud_ini; private TextField calle_fin; private TextField num_fin; private TextField colonia_fin; private TextField cp_fin; private TextField localidad_fin; private TextField municipio_fin; private TextField estado_fin; private TextField pais_fin; private TextField cantidad; private ChoiceGroup mapa; private PoiGeoreferenciado poigeo_ini; private PoiNoGeoreferenciado poinogeo_fin; private Camino camino; private Mensaje msj;

public QCaminoGeo_NoGeo(){ display=Display.getDisplay(this); String opcmapa[] = {"Si", "No"}; formDatos= new Form("Datos de la consulta"); telefono= new TextField("Teléfono: ",null,30,TextField.NUMERIC); latitud_ini= new TextField("Latitud: ",null,30,TextField.DECIMAL); longitud_ini= new TextField("Longitud: ",null,30,TextField.ANY); calle_fin = new TextField("Calle: ",null,30,TextField.ANY); num_fin = new TextField("Numero: ",null,30,TextField.NUMERIC); colonia_fin = new TextField("Colonia: ",null,30,TextField.ANY); cp_fin = new TextField("Código Postal: ",null,30,TextField.NUMERIC); localidad_fin = new TextField("Localidad: ",null,30,TextField.ANY); municipio_fin = new TextField("Municipio: ",null,30,TextField.ANY); estado_fin = new TextField("Estado: ",null,30,TextField.ANY); pais_fin = new TextField("País: ",null,30,TextField.ANY); cantidad=new TextField( "Num de respuestas deseada: ",null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa: ", Choice.POPUP, opcmapa,

null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append("PUNTO INICIAL"); formDatos.append(latitud_ini); formDatos.append(longitud_ini); formDatos.append("PUNTO FINAL"); formDatos.append(calle_fin); formDatos.append(num_fin); formDatos.append(colonia_fin); formDatos.append(cp_fin); formDatos.append(localidad_fin); formDatos.append(municipio_fin); formDatos.append(estado_fin);

Page 119: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

106

formDatos.append(pais_fin); formDatos.append(cantidad); formDatos.append(mapa); mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poigeo_ini=new PoiGeoreferenciado();

poigeo_ini.EscribeLatitudG(latitud_ini.getString()); poigeo_ini.EscribeLongitudG(longitud_ini.getString()); poinogeo_fin=new PoiNoGeoreferenciado(); poinogeo_fin.EscribeCalle(calle_fin.getString()); poinogeo_fin.EscribeNum(num_fin.getString()); poinogeo_fin.EscribeColonia(colonia_fin.getString()); poinogeo_fin.EscribeCP(cp_fin.getString()); poinogeo_fin.EscribeLocalidad(localidad_fin.getString()); poinogeo_fin.EscribeMunicipio(municipio_fin.getString()); poinogeo_fin.EscribeEstado(estado_fin.getString()); poinogeo_fin.EscribePais(pais_fin.getString()); if(mapa.getSelectedIndex()==0) poinogeo_fin.EscribeMapa(true); camino=new Camino(Camino.INI_GEO__FIN_NOGEO); camino.QueryCamino(poigeo_ini,poinogeo_fin); msj=new Mensaje(Mensaje.Q_CAMINO_GEO_NOGEO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(camino); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace(); MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.4 Código fuente del MIDlet del caso de prueba APISMSMMS-01-04

// QGeoEvento.java package Consulta_Geo_Evento; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.PoiGeoreferenciado; import mx.edu.cenidet.apisms.dato.Evento; import mx.edu.cenidet.apisms.trama.*; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QGeoEvento extends MIDlet implements CommandListener, ItemCommandListener { public Display display; private Form formDatos; private Command enviar; private Command salir; private TextField telefono; private ChoiceGroup tipo; private ChoiceGroup distancia; private ChoiceGroup mapa; private TextField fecha; private TextField cantidad; private PoiGeoreferenciado poigeo; private Evento evento; private Mensaje msj; private String latitud="18.876709"; private String longitud="-99.219766"; public QGeoEvento(){ display=Display.getDisplay(this); formDatos= new Form("Datos de la consulta"); String opciones[] = {"Político","Social","Cultural", "Religioso","Musical","Otro","Todos"}; String distancias[] = { "50","100","150","200","250","300","350","400", "450","500","1000","1500","2000","2500","3000"}; String opcmapa[] = {"Si", "No"}; tipo= new ChoiceGroup("Tipo: ",Choice.POPUP,opciones,null); distancia= new ChoiceGroup("Distancia: ", Choice.POPUP,distancias,null); telefono= new TextField("Teléfono: ",null,30,TextField.NUMERIC); fecha= new TextField("Fecha: ",null,10,TextField.ANY); cantidad=new TextField("Num. de respuestas deseada: ", null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa: ",

Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append(tipo); formDatos.append(fecha); formDatos.append(distancia); formDatos.append(cantidad); formDatos.append(new StringItem("Latitud",latitud)); formDatos.append(new StringItem("Longitud",longitud)); formDatos.append(mapa); mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poigeo=new PoiGeoreferenciado(); poigeo.EscribeLatitudG(latitud); poigeo.EscribeLongitudG(longitud); poigeo.EscribeDistancia(distancia.getString(

Page 120: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

107

distancia.getSelectedIndex())); if(mapa.getSelectedIndex()==0) poigeo.EscribeMapa(true); evento=new Evento(); evento.EscribeTipo(tipo.getString( tipo.getSelectedIndex()).toUpperCase()); evento.EscribeFecha(fecha.getString()); evento.EscribeLugar(poigeo); msj=new Mensaje(Mensaje.Q_GEO_EVENTO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(evento); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace();

MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.5 Código fuente del MIDlet del caso de prueba APISMSMMS-01-05

// QNoGeoUbicacion.java package Consulta_NoGeo_Ubicacion; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.PoiNoGeoreferenciado; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QNoGeoUbicacion extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; private Form formDatos; private Command enviar; private Command salir; private TextField telefono; private ChoiceGroup palabra; private ChoiceGroup distancia; private TextField calle; private TextField num; private TextField colonia; private TextField cp; private TextField localidad; private TextField municipio; private TextField estado; private TextField pais; private TextField cantidad; private ChoiceGroup mapa; private PoiNoGeoreferenciado poi_nogeo; public QNoGeoUbicacion(){ display=Display.getDisplay(this); formDatos= new Form("Datos de la consulta"); String opciones[] = {"Todos","Taxi","Pasteleria", "MSuper","Gym","Escuela","Video","Farmacia", "Hotel","Banco","Bus","Cine","Hospital","Restaurante","SMercado"}; String distancias[] = { "50","100","150","200","250","300","350","400", "450","500","1000","1500","2000","2500","3000"}; String opcmapa[] = {"Si", "No"}; palabra= new ChoiceGroup("Palabra",Choice.POPUP,opciones,null); distancia= new ChoiceGroup("Distancia", Choice.POPUP,distancias,null); telefono= new TextField("teléfono",null,30,TextField.NUMERIC); calle = new TextField("Calle",null,30,TextField.ANY); num = new TextField("Numero",null,30,TextField.NUMERIC); colonia = new TextField("Colonia",null,30,TextField.ANY); cp = new TextField("Código Postal",null,30,TextField.NUMERIC); localidad = new TextField("Localidad",null,30,TextField.ANY); municipio = new TextField("Municipio",null,30,TextField.ANY); estado = new TextField("Estado",null,30,TextField.ANY); pais = new TextField("País",null,30,TextField.ANY); cantidad=new TextField("Num de respuestas deseada", null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa:", Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append(palabra); formDatos.append(distancia); formDatos.append(calle);

formDatos.append(num); formDatos.append(colonia); formDatos.append(cp); formDatos.append(localidad); formDatos.append(municipio); formDatos.append(estado); formDatos.append(pais); formDatos.append(cantidad); formDatos.append(mapa); cantidad.addCommand(enviar); cantidad.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ int num_resp=Integer.parseInt(cantidad.getString()); String tel=telefono.getString(); poi_nogeo=new PoiNoGeoreferenciado(); poi_nogeo.EscibeClasif(palabra.getString( palabra.getSelectedIndex()).toUpperCase()); poi_nogeo.EscribeDistancia(distancia.getString( distancia.getSelectedIndex())); poi_nogeo.EscribeCalle(calle.getString()); poi_nogeo.EscribeNum(num.getString()); poi_nogeo.EscribeColonia(colonia.getString()); poi_nogeo.EscribeCP(cp.getString()); poi_nogeo.EscribeLocalidad(localidad.getString()); poi_nogeo.EscribeMunicipio(municipio.getString()); poi_nogeo.EscribeEstado(estado.getString()); poi_nogeo.EscribePais(pais.getString()); if(mapa.getSelectedIndex()==0) poi_nogeo.EscribeMapa(true); EnviarSMS enviar=new EnviarSMS(this,tel,num_resp,poi_nogeo); } } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

Page 121: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

108

B.6 Código fuente del MIDlet del caso de prueba APISMSMMS-01-06

// QCaminoNoGeo_Geo.java package Consulta_Camino_NoGeo_Geo; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.*; import mx.edu.cenidet.apisms.trama.*; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QCaminoNoGeo_Geo extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; private Form formDatos; private Command enviar; private Command salir; private ChoiceGroup mapa; private TextField telefono; private TextField latitud_fin; private TextField longitud_fin; private TextField calle_ini; private TextField num_ini; private TextField colonia_ini; private TextField cp_ini; private TextField localidad_ini; private TextField municipio_ini; private TextField estado_ini; private TextField pais_ini; private TextField cantidad; private PoiGeoreferenciado poigeo_fin; private PoiNoGeoreferenciado poinogeo_ini; private Camino camino; private Mensaje msj; public QCaminoNoGeo_Geo(){ display=Display.getDisplay(this); String opcmapa[] = {"Si", "No"}; formDatos= new Form("Datos de la consulta"); telefono= new TextField("Teléfono: ",null,30,TextField.NUMERIC); latitud_fin= new TextField("Latitud: ",null,30,TextField.DECIMAL); longitud_fin= new TextField("Longitud: ",null,30,TextField.ANY); calle_ini = new TextField("Calle: ",null,30,TextField.ANY); num_ini = new TextField("Numero: ",null,30,TextField.NUMERIC); colonia_ini = new TextField("Colonia: ",null,30,TextField.ANY); cp_ini = new TextField("Código Postal: ",null,30,TextField.NUMERIC); localidad_ini = new TextField("Localidad: ",null,30,TextField.ANY); municipio_ini = new TextField("Municipio: ",null,30,TextField.ANY); estado_ini = new TextField("Estado: ",null,30,TextField.ANY); pais_ini = new TextField("País: ",null,30,TextField.ANY); cantidad=new TextField("Num. de respuestas deseada:", null,2,TextField.NUMERIC); mapa = new ChoiceGroup("Recibir mapa: ", Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append("PUNTO INICIAL"); formDatos.append(calle_ini); formDatos.append(num_ini); formDatos.append(colonia_ini); formDatos.append(cp_ini); formDatos.append(localidad_ini); formDatos.append(municipio_ini); formDatos.append(estado_ini); formDatos.append(pais_ini); formDatos.append("PUNTO FINAL"); formDatos.append(latitud_fin); formDatos.append(longitud_fin); formDatos.append(cantidad); formDatos.append(mapa);

mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poigeo_fin=new PoiGeoreferenciado(); poigeo_fin.EscribeLatitudG(latitud_fin.getString()); poigeo_fin.EscribeLongitudG(longitud_fin.getString()); if(mapa.getSelectedIndex()==0) poigeo_fin.EscribeMapa(true); poinogeo_ini=new PoiNoGeoreferenciado(); poinogeo_ini.EscribeCalle(calle_ini.getString()); poinogeo_ini.EscribeNum(num_ini.getString()); poinogeo_ini.EscribeColonia(colonia_ini.getString()); poinogeo_ini.EscribeCP(cp_ini.getString()); poinogeo_ini.EscribeLocalidad(localidad_ini.getString()); poinogeo_ini.EscribeMunicipio(municipio_ini.getString()); poinogeo_ini.EscribeEstado(estado_ini.getString()); poinogeo_ini.EscribePais(pais_ini.getString()); camino=new Camino(Camino.INI_NOGEO__FIN_GEO); camino.QueryCamino(poinogeo_ini,poigeo_fin); msj=new Mensaje(Mensaje.Q_CAMINO_NOGEO_GEO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(camino); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace(); MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.7 Código fuente del MIDlet del caso de prueba APISMSMMS-01-07

// QCaminoNoGeo_NoGeo.java package Consulta_Camino_NoGeo_NoGeo; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.*; import mx.edu.cenidet.apisms.trama.*; /**

* @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QCaminoNoGeo_NoGeo extends MIDlet implements CommandListener, ItemCommandListener { public Display display; private Form formDatos; private Command enviar; private Command salir; private TextField telefono, calle_ini, num_ini, colonia_ini;

Page 122: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

109

private TextField cp_ini, localidad_ini, municipio_ini; private TextField estado_ini, pais_ini; private TextField calle_fin, num_fin, colonia_fin, cp_fin; private TextField localidad_fin, municipio_fin, estado_fin; private TextField pais_fin; private TextField cantidad; private ChoiceGroup mapa; private PoiNoGeoreferenciado poinogeo_ini,poinogeo_fin; private Camino camino; private Mensaje msj; public QCaminoNoGeo_NoGeo(){ display=Display.getDisplay(this); String opcmapa[] = {"Si", "No"}; formDatos= new Form("Datos de la consulta"); telefono= new TextField("Teléfono: ",null,30,TextField.NUMERIC); calle_ini = new TextField("Calle: ",null,30,TextField.ANY); num_ini = new TextField("Numero: ",null,30,TextField.NUMERIC); colonia_ini = new TextField("Colonia: ",null,30,TextField.ANY); cp_ini = new TextField("Código Postal: ",null,30,TextField.NUMERIC); localidad_ini = new TextField("Localidad: ",null,30,TextField.ANY); municipio_ini = new TextField("Municipio: ",null,30,TextField.ANY); estado_ini = new TextField("Estado: ",null,30,TextField.ANY); pais_ini = new TextField("País: ",null,30,TextField.ANY); calle_fin = new TextField("Calle: ",null,30,TextField.ANY); num_fin = new TextField("Numero: ",null,30,TextField.NUMERIC); colonia_fin = new TextField("Colonia: ",null,30,TextField.ANY); cp_fin = new TextField("Código Postal: ",null,30,TextField.NUMERIC); localidad_fin = new TextField("Localidad: ",null,30,TextField.ANY); municipio_fin = new TextField("Municipio:",null,30,TextField.ANY); estado_fin = new TextField("Estado: ",null,30,TextField.ANY); pais_fin = new TextField("País: ",null,30,TextField.ANY); cantidad=new TextField( "Num. de respuestas deseada: ",null,2,TextField.NUMERIC); mapa = new ChoiceGroup( "Recibir mapa: ", Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append("PUNTO INICIAL"); formDatos.append(calle_ini); formDatos.append(num_ini); formDatos.append(colonia_ini); formDatos.append(cp_ini); formDatos.append(localidad_ini); formDatos.append(municipio_ini); formDatos.append(estado_ini); formDatos.append(pais_ini); formDatos.append("PUNTO FINAL"); formDatos.append(calle_fin); formDatos.append(num_fin); formDatos.append(colonia_fin); formDatos.append(cp_fin); formDatos.append(localidad_fin); formDatos.append(municipio_fin); formDatos.append(estado_fin); formDatos.append(pais_fin); formDatos.append(cantidad); formDatos.append(mapa); mapa.addCommand(enviar); mapa.setItemCommandListener(this);

formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed(); } } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poinogeo_ini=new PoiNoGeoreferenciado(); poinogeo_ini.EscribeCalle(calle_ini.getString()); poinogeo_ini.EscribeNum(num_ini.getString()); poinogeo_ini.EscribeColonia(colonia_ini.getString()); poinogeo_ini.EscribeCP(cp_ini.getString()); poinogeo_ini.EscribeLocalidad(localidad_ini.getString()); poinogeo_ini.EscribeMunicipio(municipio_ini.getString()); poinogeo_ini.EscribeEstado(estado_ini.getString()); poinogeo_ini.EscribePais(pais_ini.getString()); poinogeo_fin=new PoiNoGeoreferenciado(); poinogeo_fin.EscribeCalle(calle_fin.getString()); poinogeo_fin.EscribeNum(num_fin.getString()); poinogeo_fin.EscribeColonia(colonia_fin.getString()); poinogeo_fin.EscribeCP(cp_fin.getString()); poinogeo_fin.EscribeLocalidad(localidad_fin.getString()); poinogeo_fin.EscribeMunicipio(municipio_fin.getString()); poinogeo_fin.EscribeEstado(estado_fin.getString()); poinogeo_fin.EscribePais(pais_fin.getString()); if(mapa.getSelectedIndex()==0) poinogeo_fin.EscribeMapa(true); camino=new Camino(Camino.INI_NOGEO__FIN_NOGEO); camino.QueryCamino(poinogeo_ini,poinogeo_fin); msj=new Mensaje(Mensaje.Q_CAMINO_NOGEO_NOGEO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(camino); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace(); MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.8 Código fuente del MIDlet del caso de prueba APISMSMMS-01-08

// QNoGeoEvento.java package Consulta_NoGeo_Evento; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import mx.edu.cenidet.apisms.dato.PoiNoGeoreferenciado; import mx.edu.cenidet.apisms.dato.Evento; import mx.edu.cenidet.apisms.trama.*; /** * @author LIRIO RUIZ G./CLAUDIA VICTORIA R. */ public class QNoGeoEvento extends MIDlet implements CommandListener, ItemCommandListener{ public Display display; private ChoiceGroup mapa; private Form formDatos; private Command enviar; private Command salir; private TextField telefono; private ChoiceGroup tipo; private ChoiceGroup distancia; private TextField fecha;

private TextField calle; private TextField num; private TextField colonia; private TextField cp; private TextField localidad; private TextField municipio; private TextField estado; private TextField pais; private TextField cantidad; private PoiNoGeoreferenciado poi_nogeo; private Evento evento; private Mensaje msj; public QNoGeoEvento(){ display=Display.getDisplay(this); formDatos= new Form("Datos de la consulta"); String opciones[] = {"Político","Social","Cultural", "Religioso","Musical","Otro","Todos"}; String distancias[] = { "50","100","150","200","250","300","350","400", "450","500","1000","1500","2000","2500","3000"}; String opcmapa[] = {"Si", "No"}; tipo= new ChoiceGroup("Tipo: ",Choice.POPUP,opciones,null);

Page 123: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

110

distancia= new ChoiceGroup( "Distancia: ",Choice.POPUP,distancias,null); telefono= new TextField("Teléfono: ",null,30,TextField.NUMERIC); fecha= new TextField("Fecha: ",null,10,TextField.ANY); calle = new TextField("Calle: ",null,30,TextField.ANY); num = new TextField("Numero: ",null,30,TextField.NUMERIC); colonia = new TextField("Colonia: ",null,30,TextField.ANY); cp = new TextField("Código Postal: ",null,30,TextField.NUMERIC); localidad = new TextField("Localidad: ",null,30,TextField.ANY); municipio = new TextField("Municipio: ",null,30,TextField.ANY); estado = new TextField("Estado: ",null,30,TextField.ANY); pais = new TextField("País: ",null,30,TextField.ANY); cantidad=new TextField( "Num. de respuestas deseada: ",null,2,TextField.NUMERIC); mapa = new ChoiceGroup( "Recibir mapa: ", Choice.POPUP, opcmapa, null); enviar=new Command("Enviar",Command.OK,1); salir=new Command("Salir",Command.EXIT,1); formDatos.append(telefono); formDatos.append(tipo); formDatos.append(fecha); formDatos.append(distancia); formDatos.append(calle); formDatos.append(num); formDatos.append(colonia); formDatos.append(cp); formDatos.append(localidad); formDatos.append(municipio); formDatos.append(estado); formDatos.append(pais); formDatos.append(cantidad); formDatos.append(mapa); mapa.addCommand(enviar); mapa.setItemCommandListener(this); formDatos.addCommand(salir); formDatos.setCommandListener(this); } public void startApp() { display.setCurrent(formDatos); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command==salir){ destroyApp(true); notifyDestroyed();

} } public void commandAction(Command command, Item item) { if(command==enviar){ FormarTrama(); } } void FormarTrama(){ String trama=""; String tel=telefono.getString(); poi_nogeo=new PoiNoGeoreferenciado(); poi_nogeo.EscribeDistancia(distancia.getString( distancia.getSelectedIndex())); poi_nogeo.EscribeCalle(calle.getString()); poi_nogeo.EscribeNum(num.getString()); poi_nogeo.EscribeColonia(colonia.getString()); poi_nogeo.EscribeCP(cp.getString()); poi_nogeo.EscribeLocalidad(localidad.getString()); poi_nogeo.EscribeMunicipio(municipio.getString()); poi_nogeo.EscribeEstado(estado.getString()); poi_nogeo.EscribePais(pais.getString()); if(mapa.getSelectedIndex()==0) { poi_nogeo.EscribeMapa(true); } evento=new Evento(); evento.EscribeTipo(tipo.getString( tipo.getSelectedIndex()).toUpperCase()); evento.EscribeFecha(fecha.getString()); evento.EscribeLugar(poi_nogeo); msj=new Mensaje(Mensaje.Q_NOGEO_EVENTO); msj.EscribeNumero(Integer.parseInt(cantidad.getString())); msj.AgregaInfo(evento); try { trama=msj.LeeTrama(); } catch (MensajeExcepcion ex) { ex.printStackTrace(); MuestraAlarma(ex.getMessage()); return; } EnviarSMS enviar=new EnviarSMS(this,tel,trama); } void MuestraAlarma(String msj){ Displayable actual; actual=display.getCurrent(); Alert alerta=new Alert("Aviso",msj,null,AlertType.INFO); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta,actual); } }

B.9 Código fuente del MIDlet del caso de prueba APISMSMMS-02 // App_RecibirMMS.java package mx.edu.cenidet.apismsmms.conexionmms; import java.io.ByteArrayInputStream; import javax.microedition.io.PushRegistry; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.wireless.messaging.Message; import javax.wireless.messaging.MessageConnection; import javax.wireless.messaging.MessageListener; import mx.edu.cenidet.apismsmms.mapasvg.ImagenSVG; import mx.edu.cenidet.apismsmms.mapasvg.CanvasSVG; /** * @author CLAUDIA VICTORIA RINCON */ public class App_RecibirMMS extends MIDlet implements CommandListener, MessageListener { private ByteArrayInputStream input; private Canvas canvas; private Command cmdBack; private Command cmdExit; private Command cmdVer; private ConexionMensajes miConexion = null; private Display display; private Form form1; private Form frmMensaje; private MessageConnection msgCon = null; private Message msg; private ReceptorMensajes recibirMsg; private String url; private String[] conexiones;

private static final String PUERTO = "5004"; public App_RecibirMMS(){ // Formulario de espera form1 = new Form("Recibir mensaje MMS"); cmdExit = new Command("Salir", Command.EXIT, 1); form1.addCommand(cmdExit); form1.setCommandListener(this); // Formulario para mensaje frmMensaje = new Form("Nuevo mensaje MMS..."); cmdVer = new Command("Ver", Command.ITEM, 1); cmdBack = new Command("Atras", Command.BACK, 1); frmMensaje.setCommandListener(this); display = Display.getDisplay(this); } public void startApp() { // URL para la conexion de mensajes url = "mms://:" + PUERTO; if(miConexion == null){ try { // Crea una nueva instancia de la clase ConexionMensajes miConexion = new ConexionMensajes(); // Se abre la conexion con la URL especificada msgCon = miConexion.abrirConexion(url); // Listener de mensajes para la conexion msgCon.setMessageListener(this); } catch(Exception e) {

Page 124: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

111

System.err.println("Error en starApp()" + e.getMessage()); } } // Obtiene una lista de las conexiones registradas // con datos disponibles conexiones = PushRegistry.listConnections(true); if((conexiones == null) || (conexiones.length == 0)) { form1.deleteAll(); StringItem msgWait = new StringItem( "Esperando MENSAJE MMS en el puerto " + PUERTO + "...", ""); form1.append(msgWait); } display.setCurrent(form1); } public void pauseApp() { } public void destroyApp(boolean unconditional) { if(msgCon != null){ try{ msgCon.setMessageListener(null); // Cerrar conexion miConexion.cerrarConexion(msgCon); } catch(Exception e){ } } form1 = null; frmMensaje = null; } public void commandAction(Command c, Displayable d){ if(c == cmdExit) { destroyApp(true); notifyDestroyed(); } else if (c == cmdBack) { display.setCurrent(form1); } else if ( c == cmdVer) { try { // Instancia de la clase MapaSVG para cargar contenido SVG ImagenSVG imagen = new ImagenSVG(); // Se carga el grafico SVG recibido en el MMS canvas = imagen.cargarMapa(input); canvas.addCommand(cmdBack); canvas.setCommandListener(this); display.setCurrent(canvas); } catch(Exception e) { System.err.println(e.getMessage()); } } } /** * Llamada asíncrona para mensajes de entrada. * El método invoca la implementación de WMA cuando se * recibe un nuevo mensaje.

* @param mc es la conección (MessageConnection) con el mensaje de * entrada.

*/ public void notifyIncomingMessage(MessageConnection mc){ msgCon = mc; // Se crea una nueva instancia de la clase ReceptorMensajes recibirMsg = new ReceptorMensajes(); // Se inicia un hilo de ejecucion para recibir y procesar el mensaje Thread h = new Thread() { public void run() { try { // Se obtiene el mensaje a traves del metodo recibirMensaje msg = recibirMsg.recibirMensaje(msgCon); // Se verifica el tipo de mensaje recibido para procesarlo String tipoMsg = recibirMsg.leerTipoMensaje(); byte[] contenido; if (tipoMsg != null) { if (tipoMsg.equals("Multimedia")) { // Procesar y obtener el contenido del mensaje MMS contenido = recibirMsg.procesarMensajeMMS(msg); input = new ByteArrayInputStream(contenido); StringItem telOrigen = new StringItem( "De: ", msg.getAddress()); StringItem Etiqueta = new StringItem( "Contenido: \n", recibirMsg.descripcionMMS()); StringItem Etiqueta2 = new StringItem( "\nEl comando \"Ver\" carga el " + "contenido del mensaje MMS.", ""); frmMensaje.deleteAll(); frmMensaje.append(telOrigen); frmMensaje.append(Etiqueta); frmMensaje.append(Etiqueta2); frmMensaje.addCommand(cmdVer); frmMensaje.addCommand(cmdBack); } else if (tipoMsg.equals("Texto") || tipoMsg.equals("Binario")) { String sms = recibirMsg.procesarMensajeSMS(msg); StringItem telOrigen = new StringItem("De: ", msg.getAddress()); StringItem mensaje = new StringItem("Mensaje: ", sms); frmMensaje.deleteAll(); frmMensaje.append(telOrigen); frmMensaje.append(mensaje); frmMensaje.addCommand(cmdBack); } else System.out.println( "Tipo de mensaje no soportado"); } } catch(Exception e) { e.printStackTrace(); } } }; h.start(); display.setCurrent(frmMensaje); } } //Fin clase

B.10 Código fuente del MIDlet del caso de prueba APISMSMMS-03 // App_ImagenSVG.java package mx.edu.cenidet.apismsmms.mapasvg; import java.io.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; /** * @author CLAUDIA VICTORIA RINCON */ public class App_ImagenSVG extends MIDlet implements CommandListener { private Canvas canvas; private Command cmdExit; private Command cmdVer; private Command cmdBack; private ChoiceGroup opc; private Display display; private Form main; private Form displaySVG;

private ImagenSVG map; private String ejemplos[] = {"my_croquis2_T11.svg", "ejemplo_croquisSVGT11.svg"}; public App_ImagenSVG(){ //Form principal main = new Form("Representación de una imagen SVG Tiny..!"); StringItem intro = new StringItem ("La aplicación muestra una imagen en formato SVG Tiny 1.1. " + "\n\nUtilice las teclas de dirección desplazarse " + "a través de la imagen: " + "arriba, abajo, izquierda, derecha.\n", null); main.append(intro); opc = new ChoiceGroup ("Seleccione la imagen a cargar: ", Choice.EXCLUSIVE, ejemplos, null); cmdExit = new Command("Salir", Command.EXIT, 1); cmdVer = new Command("Ver", Command.ITEM, 2); main.append(opc); main.addCommand(cmdExit);

Page 125: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

112

main.addCommand(cmdVer); display = Display.getDisplay(this); main.setCommandListener(this); //Form para visualizar la imagen displaySVG = new Form("Imagen SVG"); cmdBack = new Command("Atras", Command.ITEM, 2); displaySVG.addCommand(cmdBack); displaySVG.setCommandListener(this); } public void startApp() { // Se muestra el formulario principal de la aplicación display.setCurrent(main); } public void pauseApp() { } public void destroyApp(boolean unconditional) { map = null; canvas = null; main = null; displaySVG = null;

} public void commandAction(Command c, Displayable d){ if(c == cmdExit) { destroyApp(true); notifyDestroyed(); } else if(c == cmdVer) { // Instancia de la clase MapaSVG map = new ImagenSVG(); if(opc.getSelectedIndex() == 0) canvas = map.cargarMapa(opc.getString(0)); else canvas = map.cargarMapa(opc.getString(1)); canvas.addCommand(cmdBack); canvas.setCommandListener(this); display.setCurrent(canvas); } else if (c == cmdBack) display.setCurrent(main); } } // Fin clase

B.11 Código fuente del MIDlet del caso de prueba APISMSMMS-04 // App_Croquis_POIs.java package mx.edu.cenidet.apismsmms.mapasvg; import java.io.*; import java.util.Vector; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.m2g.SVGImage; import javax.microedition.midlet.*; import mx.edu.cenidet.apismsmms.dato.PoiGeoreferenciado; import mx.edu.cenidet.apismsmms.trama.*; /** * @author CLAUDIA VICTORIA RINCON */ public class App_Croquis_POIs extends MIDlet implements CommandListener { private Canvas canvas; private Command cmdExit; private Command cmdVer; private Command cmdBack; private Command cmdZoomin; private Command cmdZoomout; private Command cmdReset; private Command cmdPuntos; private Display display; private Form main; private Form displaySVG; private boolean done = false; private String cadena; private SVGImage imagen; private ImagenSVG map; private AgregarElementosSVG dibujarElements = new AgregarElementosSVG(); private Vector puntitos = new Vector(); public App_Croquis_POIs(){ // Trama de respuesta georeferenciada de ubicacion cadena = "a;5;1;3,9,Palace,51,42,5 estrellas;" + "3,9,SolIn,108,33,4 estrellas;" + "3,9,Paraiso,70,199,4 estrellas;" + "3,9,Kaisers,176,99,5 estrellas;" + "3,9,Mexico,194,26,5 estrellas;10:% " + "desc al mostrar este msj"; //Form principal main = new Form("Aplicacion para dibujar POIs en un mapa SVG"); StringItem intro = new StringItem("La aplicación muestra un " + "croquis en formato SVG Tiny 1.1 " + "y dibuja puntos de interes (POIs). " + "\n\nUtilice las teclas de dirección para mover la imagen " + "en las direcciones: arriba, abajo, izquierda, " + "derecha. \n\nEn el menú se " + "encuentran las opciones: Zoom-in, " + "Zoom-out, Vista Original, POIs y Atrás.", null); main.append(intro); cmdExit = new Command("Salir", Command.EXIT, 1); cmdVer = new Command("Mostrar", Command.ITEM, 2); main.addCommand(cmdExit); main.addCommand(cmdVer); display = Display.getDisplay(this);

main.setCommandListener(this); //Form para visualizar la imagen displaySVG = new Form("Imagen SVG"); cmdZoomin = new Command("Zoom-in", Command.ITEM, 1); cmdZoomout = new Command("Zoom-out", Command.ITEM, 1); cmdReset = new Command("Vista Orig.", Command.ITEM, 1); cmdPuntos = new Command("POIs", Command.ITEM, 1); cmdBack = new Command("Atras", Command.ITEM, 2); displaySVG.addCommand(cmdBack); displaySVG.setCommandListener(this); } public void startApp() { // Se carga el mapa SVG map = new ImagenSVG(); canvas = map.cargarMapa("ejemplo_croquisSVGT11.svg"); // Se obtiene una instancia de la imagen SVG cargada imagen = map.getMapa(); // Se muestra el formulario principal de la aplicación display.setCurrent(main); } public void pauseApp() { } public void destroyApp(boolean unconditional) { main = null; displaySVG = null; canvas = null; puntitos = null; } public void commandAction(Command c, Displayable d){ if(c == cmdExit){ destroyApp(true); notifyDestroyed(); } else if(c == cmdVer){ canvas.addCommand(cmdZoomin); canvas.addCommand(cmdZoomout); canvas.addCommand(cmdReset); canvas.addCommand(cmdPuntos); canvas.addCommand(cmdBack); canvas.setCommandListener(this); canvas.repaint(); Display.getDisplay(this).setCurrent(canvas); } else if(c == cmdZoomin){ map.zoom(0.10f); } else if(c == cmdZoomout){ map.zoom(-0.10f); } else if(c == cmdReset) { map.restablecerMapa(); canvas.repaint(); } else if(c == cmdPuntos){ if (done == false) { interpretaTrama();

Page 126: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

113

int size = puntitos.size()/3; int indice1, contador = 0; float x1, y1; String strX1, strY1, strEtiq, idPunto, idTexto; indice1 = -1; for(int i =0; i<size; i++) { indice1 = indice1 + 3; strX1 = (String) puntitos.elementAt(indice1-2); strY1 = (String) puntitos.elementAt(indice1-1); strEtiq = (String) puntitos.elementAt(indice1); x1 = Float.parseFloat(strX1); y1 = Float.parseFloat(strY1); idPunto = "Punto" + contador; idTexto = "Texto" + contador; dibujarElements.dibujarPunto( imagen, x1, y1, idPunto, strEtiq, idTexto); contador++; } done = true; canvas.repaint(); } } else if (c == cmdBack) display.setCurrent(main); } public void interpretaTrama() { boolean flag = false; PoiGeoreferenciado poigeo; Mensaje sms = new Mensaje();

try { sms.RecibeTrama(cadena); flag = true; } catch (MensajeExcepcion ex) { MuestraError(ex.getMessage()); ex.printStackTrace(); } if(flag) { int tipo = sms.LeeTipoTrama(); switch(tipo) { case 10: for(int i=0; i<sms.tamano(); i++) { poigeo = new PoiGeoreferenciado(); poigeo = sms.LeeGeoSiguiente(); puntitos.addElement(poigeo.LeeLatitudG()); puntitos.addElement(poigeo.LeeLongitudG()); puntitos.addElement(poigeo.LeeNombre()); } } } } private void MuestraError(String error) { Alert alerta=new Alert("Error",error,null,AlertType.ERROR); alerta.setTimeout(Alert.FOREVER); display.setCurrent(alerta, canvas); } } // Fin clase

B.12 Código fuente del MIDlet del caso de prueba APISMSMMS-05 // App_Croquis_Camino.java package mx.edu.cenidet.apismsmms.mapasvg; import java.io.*; import java.util.Vector; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.m2g.SVGImage; import javax.microedition.midlet.*; /** * @author CLAUDIA VICTORIA RINCON */ public class App_Croquis_Camino extends MIDlet implements CommandListener { private Canvas canvas; private Command cmdExit; private Command cmdVer; private Command cmdBack; private Command cmdZoomin; private Command cmdZoomout; private Command cmdReset; private Command cmdCamino; private Display display; private Form main; private Form displaySVG; private boolean done = false; private String cadena; private SVGImage imagen; private ImagenSVG map; private AgregarElementosSVG dibujarElements = new AgregarElementosSVG(); private Vector puntitos = new Vector(); public App_Croquis_Camino(){ // Cadena para dibujar el camino cadena = "233,43;173,43;135,127;118,169;86,169;86,212;"; //Form principal main = new Form("Aplicacion para dibujar un " + "camino en un mapa SVG"); StringItem intro; intro = new StringItem("La aplicación muestra " + "un croquis en formato SVG Tiny 1.1 " + "y dibuja un camino. \n\nUtilice las teclas de " + "dirección para mover la imagen: " + "arriba, abajo, izquierda, derecha. \n\nEn el menú se " + "encuentran las opciones: Zoom-in, Zoom-out," + " Vista Original, Camino y Atrás.", null); main.append(intro); cmdExit = new Command("Salir", Command.EXIT, 1); cmdVer = new Command("Mostrar", Command.ITEM, 2);

main.addCommand(cmdExit); main.addCommand(cmdVer); display = Display.getDisplay(this); main.setCommandListener(this); //Form para visualizar la imagen displaySVG = new Form("Imagen SVG"); cmdZoomin = new Command("Zoom-in", Command.ITEM, 1); cmdZoomout = new Command("Zoom-out", Command.ITEM, 1); cmdReset = new Command("Vista Orig.", Command.ITEM, 1); cmdCamino = new Command("Camino", Command.ITEM, 1); cmdBack = new Command("Atras", Command.ITEM, 2); displaySVG.addCommand(cmdBack); displaySVG.setCommandListener(this); } public void startApp() { // Se carga el mapa SVG map = new ImagenSVG(); System.out.println("ANTES DEL ERROR :s"); canvas = map.cargarMapa("my_croquis2_T11.svg"); // Se obtiene una instancia de imagen SVG cargada imagen = map.getMapa(); // Se muestra el formulario principal de la aplicación display.setCurrent(main); } public void pauseApp() { } public void destroyApp(boolean unconditional) { main = null; displaySVG = null; canvas = null; } public void commandAction(Command c, Displayable d){ if(c == cmdExit){ destroyApp(true); notifyDestroyed(); } else if(c == cmdVer){ canvas.addCommand(cmdZoomin); canvas.addCommand(cmdZoomout); canvas.addCommand(cmdReset); canvas.addCommand(cmdCamino); canvas.addCommand(cmdBack); canvas.setCommandListener(this); canvas.repaint(); Display.getDisplay(this).setCurrent(canvas); } else if(c == cmdZoomin){

Page 127: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

114

map.zoom(0.10f); } else if(c == cmdZoomout){ map.zoom(-0.10f); } else if(c == cmdReset) { map.restablecerMapa(); canvas.repaint(); } else if(c == cmdCamino){ if (done == false) { puntitos.addElement("233"); puntitos.addElement("43"); puntitos.addElement("173"); puntitos.addElement("43"); puntitos.addElement("135"); puntitos.addElement("127"); puntitos.addElement("118"); puntitos.addElement("169"); puntitos.addElement("86"); puntitos.addElement("169"); puntitos.addElement("86"); puntitos.addElement("212"); int size = puntitos.size()/2; int indice1, contador = 0; float x1, y1;

String strX1, strY1, strEtiq, idPunto, idTexto; indice1 = -1; for(int i =0; i<size; i++) { indice1 = indice1 + 2; strX1 = (String) puntitos.elementAt(indice1-1); strY1 = (String) puntitos.elementAt(indice1); strEtiq = ""; x1 = Float.parseFloat(strX1); y1 = Float.parseFloat(strY1); idPunto = "Punto" + contador; idTexto = "Texto" + contador; dibujarElements.dibujarPunto( imagen, x1, y1, idPunto, strEtiq, idTexto); contador++; } dibujarElements.dibujarCamino(imagen, cadena); done = true; canvas.repaint(); } } else if (c == cmdBack) display.setCurrent(main); } } // Fin clase

B.13 Código fuente del MIDlet del caso de prueba APISMSMMS-06 // App_Localizacion.java package mx.edu.cenidet.apismsmms.localizacionmovil; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * @author CLAUDIA VICTORIA RINCON */ public class App_Localizacion extends MIDlet implements CommandListener { private Display display; private Form mainForm, LBSForm; private StringItem etiq1, etiq2, etiq3, etiq4; private ChoiceGroup opcCost, opcPrecision; private Command getLocation; private Command salir; private Command back; private int meters; private boolean flag; private Localizacion conex; public App_Localizacion(){ display = Display.getDisplay(this); // mainForm mainForm = new Form("Aplicacion para obtener geoposicion..!"); String opciones[] = {"No", "Si"}; String metros[] = {"100", "200", "300", "400", "500"}; opcCost = new ChoiceGroup("Busqueda con costo: ", Choice.EXCLUSIVE, opciones, null); opcPrecision = new ChoiceGroup("Precision (metros): ", Choice.POPUP, metros, null); StringItem nota = new StringItem("*La opcion \"No\" " + "busca información vía GPS interno" + "\n*La opcion \"Si\" obtiene información a través de " + "alguna tecnología vía su compañía telefónica y " + "puede tener un costo", ""); getLocation = new Command("GetLocation", Command.SCREEN, 1); salir = new Command("Salir", Command.EXIT, 1); mainForm.append("Seleccione un criterio para la busqueda de " + "un proveedor de localización."); mainForm.append(opcPrecision); mainForm.append(opcCost); mainForm.append(nota); mainForm.addCommand(getLocation); mainForm.addCommand(salir); mainForm.setCommandListener(this); // LBSForm LBSForm = new Form("Informacion de Geoposicionamiento"); etiq1 = new StringItem("Datos de Localización:", ""); LBSForm.append(etiq1); back = new Command("Atras", Command.BACK, 1); LBSForm.addCommand(back);

LBSForm.setCommandListener(this); } public void startApp() { display.setCurrent(mainForm); } public void pauseApp() { } public void destroyApp(boolean unconditional) { LBSForm = null; } public void commandAction(Command c, Displayable d){ if (c == salir) { destroyApp(false); notifyDestroyed(); } else if(c == getLocation) { if (opcCost.getSelectedIndex() == 0) flag = false; else flag = true; String precision = opcPrecision.getString( opcPrecision.getSelectedIndex()); meters = Integer.valueOf(precision).intValue(); LBSForm.deleteAll(); conex = new Localizacion(); new Thread() { public void run() { try { conex.Geoposicion(flag, meters); etiq2 = new StringItem("Latitud : ", Double.toString(conex.leeLatitud())); etiq3 = new StringItem("Longitud : ", Double.toString(conex.leeLongitud())); etiq4 = new StringItem("Altitud : ", Float.toString(conex.leeAltitud())); LBSForm.append(etiq2); LBSForm.append(etiq3); LBSForm.append(etiq4); } catch(Exception e){ System.out.println( "Ocurrió un error: " + e.getMessage()); } } }.start(); display.setCurrent(LBSForm); } else if (c == back) display.setCurrent(mainForm); } }

Page 128: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo B

115

B.14 Código fuente del MIDlet del caso de prueba APISMSMMS-07 // App_Http.java package mx.edu.cenidet.apismsmms.conexionhttp; import java.io.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * @author CLAUDIA VICTORIA RINCON */ public class App_Http extends MIDlet implements CommandListener { private Display display; private Form mainForm; private Form connectForm; private Form displayForm; private StringItem messageLabel; private Command okCommand; private Command exitCommand; private Command backCommand; private ChoiceGroup opciones; private static String URL; private ConexionHTTP conexionHttp; PropiedadesGETMap propiedades = new PropiedadesGETMap(); public App_Http(){ display = Display.getDisplay(this); // Items y comandos StringItem intro = new StringItem("La aplicación realiza una " + "conexion a un servidor a través del protocolo Http", ""); String ejemplos[] = {"http://terraservice.net/ogcmap.ashx", "http://localhost:1080/geoserver/wms"}; opciones = new ChoiceGroup("Realicar conexion a: ", Choice.EXCLUSIVE, ejemplos, null); exitCommand = new Command("Exit", Command.EXIT, 0); okCommand = new Command("OK", Command.OK, 0); backCommand = new Command("Back", Command.BACK, 0); // Formulario mainForm mainForm = new Form("Cliente HTTP"); mainForm.append("Tipo de peticion a realizar: \"GetMap\""); mainForm.append(intro); mainForm.append(opciones); mainForm.addCommand(okCommand); mainForm.addCommand(exitCommand); mainForm.setCommandListener(this); // Formulario connectForm connectForm = new Form("Conectando"); messageLabel = new StringItem( "Abriendo conexion...\nPor favor espere...", ""); connectForm.append(messageLabel); connectForm.addCommand(backCommand); connectForm.setCommandListener(this); // Formulario displayForm displayForm = new Form("Server Reply"); displayForm.addCommand(backCommand); displayForm.setCommandListener(this); } public void startApp() { display.setCurrent(mainForm); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable d){ if(c == exitCommand){ try { conexionHttp.cerrarConexionHttp();

} catch(Exception ioe){ System.err.println(ioe.getMessage()); } destroyApp(false); notifyDestroyed(); } else if (c == okCommand){ displayForm.deleteAll(); display.setCurrent(connectForm); // Crea una nueva instancia para establecer // las propiedades de la petición GetMap if (opciones.getSelectedIndex() == 0) { propiedades.setUrl("http://terraservice.net/ogcmap.ashx"); propiedades.setVersion("1.1.1"); propiedades.setLayers("doq"); propiedades.setCRS("EPSG:26911"); propiedades.setBBox("282587,4188958,283717,4190390"); propiedades.setWidth("240"); propiedades.setHeight("300"); propiedades.setFormat("image/jpeg"); } else { propiedades.setUrl("http://localhost:1080/geoserver/wms"); propiedades.setStyles("population"); propiedades.setLayers("topp:states"); propiedades.setCRS("EPSG:4326"); propiedades.setBBox("-130,24,-66,50"); propiedades.setWidth("235"); propiedades.setHeight("180"); propiedades.setFormat("image/png"); } URL = propiedades.getRequest(); Thread hilo = new Thread(){ public void run() { try { // Crea una instancia ConexionHttp // para abrir la conexion Http conexionHttp = (ConexionHTTP) new ConexionHTTP(); // Abrir conexion Http a la url establecida en // PropiedadesConexionHTTP int code = conexionHttp.abrirConexionHttp(URL); if(code == 200){ StringItem peticion = new StringItem( propiedades.getRequest(), ""); displayForm.append(peticion); // Envio y recepcion de datos byte imageData[] = conexionHttp.enviarPeticion(); try { Image img = Image.createImage( imageData, 0, imageData.length); displayForm.append(img); } catch(Exception e){ System.out.println( "Error al cargar la imagen: " + e.getMessage()); } display.setCurrent(displayForm); } } catch(Exception e){ connectForm.append(e.getMessage()); System.err.println("Error al conectar: " + e.getMessage()); } } // fin run() }; hilo.start(); } else if(c == backCommand){ display.setCurrent(mainForm); } } }

Para los casos de prueba APISMSMMS-08, se utilizó el MIDlet del caso APISMSMMS-04 ya que éste también implementa las operaciones zoom-in, zoom-out, paneo y vista original.

Page 129: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ANEXO C PLAN DE PRUEBAS

Plan de pruebas APISMSMMS para verificar el funcionamiento de la API desarrollada.

Page 130: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

117

1. Identificador del plan de pruebas

APISMSMMS API: Application Programming Interface

SMS: Short Message Service MMS: Multimedia Messaging Service

1.1 Introducción

El plan de pruebas se definió de acuerdo al estándar IEEE 829-1998 para pruebas de software [IEEEStd829]. Permitirá verificar la funcionalidad de la API SMS/MMS que es una herramienta para desarrollar aplicaciones basadas en localización para dispositivos móviles. Implementa servicios como: mensajería SMS/MMS, conexión HTTP, localización por medio del dispositivo móvil y visualización/manipulación de mapas vectoriales SVG Tiny.

Las funciones a desarrollar son:

1. Formar trama para solicitar un mapa. 2. Recibir respuesta en un mensaje MMS. 3. Procesar imágenes de mapas SVG. 4. Representar puntos de interés sobre un mapa. 5. Trazar camino. 6. Obtener datos de localización del dispositivo móvil. 7. Implementar conexiones HTTP. 8. Visualizar e interactuar con el mapa.

La hipótesis nula a probar es la siguiente: Con funciones que utilicen el servicio de mensajería SMS/MMS, el protocolo HTTP, el sistema GPS y gráficos SVG Tiny no es posible enviar y recibir información georeferencial para desarrollar aplicaciones basadas en localización con mapas de navegación.

La hipótesis alterna es:

Con funciones que utilicen el servicio de mensajería SMS/MMS, el protocolo HTTP, el sistema GPS y gráficos SVG Tiny es posible enviar y recibir información georeferencial para desarrollar aplicaciones basadas en localización con mapas de navegación.

Como parte del plan de pruebas (aparte de la Introducción), también se incluyen los siguientes puntos:

Descripción del plan de pruebas.

Casos de prueba.

Procedimiento de pruebas.

Page 131: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

118

1.2 Descripción del Plan de Pruebas

1.2.1 Elementos de prueba

Las funciones a desarrollar y probar para la API SMS/MMS se identifican como se muestra en la tabla C.1.

Tabla C.1 Identificadores de las funciones a probar.

Tipo Nombre

Función APISMSMMS-01 Formar trama para solicitar un mapa Función APISMSMMS-02 Recibir respuesta en un mensaje MMS Función APISMSMMS-03 Procesar imágenes de mapas SVG Función APISMSMMS-04 Representar puntos de interés sobre un mapa Función APISMSMMS-05 Trazar camino Función APISMSMMS-06 Obtener datos de localización del dispositivo móvil Función APISMSMMS-07 Implementar conexiones HTTP Función APISMSMMS-08 Visualizar e interactuar con el mapa

1.2.2 Características a ser probadas

La descripción de los casos de prueba que se presenta más adelante permitirá validar y verificar que la API SMS/MMS funciona como herramienta de programación para facilitar el desarrollo de aplicaciones basadas en localización, de acuerdo a lo establecido en el capítulo de Análisis y Diseño.

1.2.3 Características excluidas de las pruebas

No se dará prioridad al diseño de las interfaces de usuario (MIDlets) que se utilizarán para probar la API.

Las aplicaciones serán configuradas para ejecutarse en dispositivos móviles que soporten la tecnología Java CLDC 1.1 y MIDP 2.0.

La API SMS/MMS así como las aplicaciones podrían no funcionar en algunos dispositivos móviles si éstos no cumplen con los requisitos mínimos que se especifican en la sección 1.3.9 de este plan de pruebas.

Los dispositivos móviles deberán soportar mensajería MMS y estar configurados adecuadamente para recibir el servicio.

Los dispositivos móviles deberán tener configurado y activado el servicio GPRS para transmitir datos a través del protocolo HTTP o alguna red inalámbrica disponible para acceder a Internet.

1.2.4 Enfoque

Para probar el funcionamiento de la API SMS/MMS se desarrollarán aplicaciones de tipo cliente que implementarán cada una de sus clases.

La API estará dirigida a dispositivos móviles como celulares de última generación y smartphones que soporten Java. Sus métodos permitirán a las aplicaciones implementar funciones de localización de servicios y puntos de interés así como visualización e

Page 132: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

119

interacción con mapas a través del dispositivo móvil. Las tecnologías a utilizar son: mensajería SMS/MMS, protocolo HTTP, sistema GPS y gráficos vectoriales SVG Tiny.

1.2.5 Criterio pasa/no pasa de los elementos

En la descripción de los casos de prueba, se especifican los resultados esperados para cada caso. Se considerará que un caso ha pasado la prueba con éxito cuando los resultados esperados coincidan con su respectiva descripción de prueba.

En el caso de no pasar la prueba, se analizarán las causas y se realizarán las modificaciones necesarias hasta obtener los resultados esperados.

1.2.6 Criterios de suspensión y requerimientos de reanudación

Para este trabajo de tesis no se establece ningún criterio para suspender de forma definitiva la prueba de algún caso. Si se encuentra algún error, se analizarán las causas, se corregirán los errores y se probará reiteradamente hasta obtener resultados exitosos.

1.2.7 Tareas de prueba

La tabla C.2 describe las tareas que se realizarán para especificar y llevar a cabo el plan de pruebas.

Tabla C.2 Descripción de las tareas de prueba a realizar.

TAREA TAREA PRECEDENTE

HABILIDADES ESPECIALES RESPONSABILIDAD

1. Preparar el plan de pruebas.

Análisis y diseño de la API SMS/MMS.

Conocer el funcionamiento de la API SMS, estándar de mensajería SMS/MMS, imágenes vectoriales, sistemas basados en localización y del estándar IEEE 829.

Autora de esta tesis.

2. Preparar las especificaciones del diseño de pruebas.

Tarea 1. Conocer la arquitectura de la API SMS, los casos de uso, las clases y métodos desarrollados.

Autora de esta tesis.

3. Preparar la especificación de los casos de prueba

Tarea 2. ---------------------------------------------- Autora de esta tesis.

4. Preparar la especificación de procedimientos de pruebas.

Tarea 3. ---------------------------------------------- Autora de esta tesis.

5. Realizar pruebas. Tarea 4. Conocer el estándar J2ME, programar MIDlets y configurar el ambiente de ejecución de los emuladores de dispositivos móviles.

Autora de esta tesis.

6. Resolver incidentes de pruebas.

Tarea 5 Conocer el estándar J2ME, programar MIDlets y configurar el ambiente de ejecución de los emuladores de dispositivos móviles.

Autora de esta tesis.

7. Evaluar los resultados.

Tarea 5. Tarea 6.

Conocer el objetivo, alcances, limitaciones e hipótesis de prueba de este trabajo de tesis.

Autora de esta tesis.

Page 133: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

120

1.2.8 Liberación de pruebas

De acuerdo a los datos de entrada se deberá obtener la salida especificada para cada caso de prueba. Los resultados que se obtengan permitirán comprobar que ha se alcanzado el objetivo y por lo tanto se deben aceptar las pruebas.

1.2.9 Requisitos ambientales

La tabla C.3 muestra las características de hardware y software a utilizar para el ambiente de pruebas.

Tabla C.3 Requisitos ambientales para el plan de pruebas APISMSMMS.

REQUISITO CARACTERÍSTICAS

PC de escritorio Procesador Pentium 4 o superior. 512 MB de memoria RAM o superior. 80 GB en disco duro. Windows XP/ Windows Vista.

Dispositivos móviles

Configuración CLDC 1.1 (JSR 139). Perfil MIDP 2.0 (JSR 118). Soportar las APIs: Location API para J2ME (JSR 179). Wireless Messaging API (WMA) 2.0 (JSR 205). Scalable 2D Vector Graphics API para J2ME (JSR

226). GPS integrado.

Herramientas Java Development Kit (J2SDK SE) NetBeans IDE 6.0 Sun Java Wireless Toolkit Mapas SVG GeoServer

JDK 1.5.0 o superior. Paquete NetBeans Mobility. Emulador de dispositivos móviles versión 2.5 o superior para CLDC. Gráficos con el perfil móvil SVG-Tiny. Servidor de mapas

1.2.10 Responsabilidades

La autora de esta tesis tiene la responsabilidad de realizar e implementar todas las pruebas especificadas.

1.2.11 Riesgos y contingencias

La realización de pruebas en dispositivos móviles puede ser afectada por problemas de hardware. En este caso, las pruebas se ejecutarán en emuladores bajo los requisitos ambientales especificados anteriormente.

Page 134: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

121

Las fuentes de los mapas serán servidores de mapas como MapServer y GeoServer. Si se presentara alguna contingencia con estos servidores, se diseñarán mapas que cumplan con las especificaciones requeridas para realizar las pruebas.

1.3 Casos de prueba

1.3.1 Características a probar

Las características que se deberán probar son las siguientes:

Formar trama para solicitar un mapa. Se probará que la trama del mensaje SMS para solicitar un mapa se forme correctamente.

Recibir respuesta en un mensaje MMS. Se verificará que se recibe un mensaje MMS en donde el contenido es la imagen de un mapa SVG.

Procesar imágenes de mapas SVG. Se probará que las imágenes de los mapas SVG se carguen y visualicen correctamente en el dispositivo móvil.

Representar puntos de interés sobre un mapa. Se verificará que se agreguen y dibujen nuevos elementos a una imagen SVG para representar puntos de interés.

Trazar camino. Se probará que se dibuja un camino sobre el mapa por medio de una cadena que define el conjunto de puntos que conforman el camino.

Obtener datos de localización del dispositivo móvil. Se probará que se obtienen datos de localización del dispositivo móvil (latitud, longitud, altitud) a través de la red de telecomunicaciones de la compañía telefónica del dispositivo o por GPS interno.

Implementar conexiones HTTP. Se enviarán y recibirán datos a un servidor de mapas a través de una conexión a Internet por medio del protocolo HTTP.

Visualizar e interactuar con el mapa. Se verificará que las operaciones: zoom-in, zoom-out, paneo y vista original sobre la imagen del mapa funcionen correctamente.

1.3.2 Pruebas a realizar

APISMSMMS-01 Formar trama para solicitar un mapa. APISMSMMS-01-01 Consulta georeferenciada para solicitar un mapa con puntos de

interés. APISMSMMS-01-02 Consulta para solicitar el mapa de un camino con puntos de

inicio y fin georeferenciados. APISMSMMS-01-03 Consulta para solicitar el mapa de un camino con punto inicial

georeferenciado y punto final no georeferenciado. APISMSMMS-01-04 Consulta georeferenciada para solicitar un mapa con eventos

cercanos. APISMSMMS-01-05 Consulta no georeferenciada para solicitar un mapa con sitios

de interés. APISMSMMS-01-06 Consulta para solicitar el mapa de un camino con punto inicial

no georeferenciado y punto final georeferenciado. APISMSMMS-01-07 Consulta para solicitar el mapa de un camino con punto de

inicio y fin no georeferenciados. APISMSMMS-01-08 Consulta no georeferenciada para solicitar el mapa de eventos

cercanos. APISMSMMS-02 Recibir respuesta en un mensaje MMS.

Page 135: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

122

APISMSMMS-03 Procesar imágenes de mapas SVG. APISMSMMS-04 Representar puntos de interés sobre un mapa. APISMSMMS-05 Trazar camino. APISMSMMS-06 Obtener datos de localización del dispositivo móvil. APISMSMMS-07 Implementar conexiones HTTP. APISMSMMS-08 Visualizar e interactuar con el mapa. APISMSMMS-08-01 Zoom-in. APISMSMMS-08-02 Zoom-out. APISMSMMS-08-03 Paneo. APISMSMMS-08-04 Vista panorámica.

1.4 Procedimiento de pruebas

En esta sección se presenta la descripción de los procedimientos de pruebas de los casos que conforman el plan de pruebas. El objetivo es validar y verificar que cada una de las clases a desarrollar para la API SMS/MMS se comporten de manera adecuada.

Para cada uno de los casos de prueba se describe el propósito, el entorno necesario para la ejecución, el procedimiento de la prueba y los resultados esperados.

El dispositivo móvil o emulador debe implementar la API SMS/MMS que se desarrollará en este trabajo de tesis para ejecutar adecuadamente las aplicaciones de prueba.

1.4.1 APISMSMMS-01 Formar trama para solicitar un mapa

1.4.1.1 Propósito

Formar una trama de consulta SMS que incluya un campo para solicitar el mapa de ubicación del usuario del dispositivo móvil.

1.4.1.2 Entorno de prueba

A través de una aplicación se captura la información necesaria para formar la trama de consulta SMS.

1.4.1.3 Proceso 1. Ejecutar una aplicación para obtener la información necesaria para la realizar la

consulta. Se especificará que se requiere un mapa. 2. La aplicación formará la trama de la consulta e imprimirá el resultado en la pantalla del

dispositivo móvil. 1.4.1.4 Resultado esperado Se formará una trama de consulta que incluirá un dato para indicar que el usuario solicita un mapa.

Page 136: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

123

1.4.2 APISMSMMS-02 Recibir respuesta en un mensaje MMS

1.4.2.1 Propósito

Verificar que una aplicación recibe correctamente un mensaje MMS que contiene la imagen de un mapa SVG.

1.4.2.2 Entorno de prueba

La prueba se realizará en un dispositivo móvil o emulador que soporte mensajería MMS. El mensaje se recibirá desde otra aplicación o herramienta en un puerto específico.

1.4.2.3 Proceso

1. Ejecutar una aplicación que permita recibir mensajes. 2. Enviar la imagen de un mapa SVG en un mensaje MMS desde otra aplicación. 3. La aplicación deberá recibir el mensaje.

1.4.2.4 Resultado esperado

La aplicación deberá recibir un mensaje MMS en un puerto específico desde otra aplicación. La imagen SVG del mapa se deberá visualizar en el dispositivo móvil.

1.4.3 APISMSMMS-03 Procesar imágenes de mapas SVG

1.4.3.1 Propósito

Verificar que se procesa correctamente una imagen SVG para cargarla y mostrarla en el dispositivo móvil.

1.4.3.2 Entorno de prueba

El dispositivo móvil o emulador deberá tener en algún medio de almacenamiento al menos una imagen SVG.

1.4.3.3 Proceso

1. Ejecutar una aplicación para cargar una imagen SVG. 2. Especificar la imagen SVG a cargar y visualizarla en la pantalla del dispositivo móvil.

1.4.3.4 Resultado esperado

La aplicación deberá cargar y mostrar correctamente la imagen SVG del mapa.

Page 137: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

124

1.4.4 APISMSMMS-04 Representar puntos de interés sobre un mapa

1.4.4.1 Propósito

Insertar nuevos elementos a la imagen de un mapa SVG para representar puntos de interés. 1.4.4.2 Entorno de prueba

El dispositivo móvil o emulador deberá tener almacenado en algún medio al menos un mapa SVG. 1.4.4.3 Proceso

1. Se deberán definir las coordenadas de cada uno de los puntos a dibujar sobre el mapa. 2. Ejecutar una aplicación para dibujar puntos de interés.

1.4.4.4 Resultado esperado

Se agregarán nuevos elementos a un mapa SVG que representen puntos de interés y se visualizarán a través de la pantalla del dispositivo móvil.

1.4.5 APISMSMMS-05 Trazar camino

1.4.5.1 Propósito

Agregar un conjunto de elementos a la imagen SVG del mapa para representar un camino sobre éste.

1.4.5.2 Entorno de prueba

El dispositivo móvil o emulador deberá tener en algún medio de almacenamiento al menos un mapa SVG. La aplicación permitirá definir las coordenadas de cada uno de los puntos que formarán el camino a trazar.

1.4.5.3 Proceso

1. Ejecutar una aplicación para dibujar un camino. 2. Obtener las coordenadas para dibujar el camino. 3. Representar el camino sobre la imagen del mapa. 1.4.5.4 Resultado esperado

Se agregarán nuevos elementos al mapa SVG en forma de líneas para representar un camino y se visualizará a través de la pantalla del dispositivo móvil.

Page 138: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

125

1.4.6 APISMSMMS-06 Obtener datos de localización del dispositivo móvil

1.4.6.1 Propósito

Obtener los datos de localización del dispositivo móvil (latitud, longitud, altitud) para conocer la posición georeferencial del usuario.

1.4.6.2 Entorno de prueba

El dispositivo móvil o emulador deberá contar con un GPS interno o un chip válido para alguna operadora telefónica.

1.4.6.3 Proceso

1. Se deberá activar el GPS interno si se dispone de éste. 2. Ejecutar una aplicación que permita obtener la información de ubicación del usuario. 1.4.6.4 Resultado esperado

Obtener los datos de localización del dispositivo móvil en términos de latitud, longitud y altitud para conocer la posición del usuario.

1.4.7 APISMSMMS-07 Implementar conexiones HTTP

1.4.7.1 Propósito

Establecer conexión a Internet a través del protocolo HTTP para enviar y recibir información desde el dispositivo móvil.

1.4.7.2 Entorno de prueba

La conexión HTTP se establecerá con un servidor de mapas y se realiza una petición GET para obtener un mapa.

1.4.7.3 Proceso

1. Ejecutar una aplicación para conexión a Internet. 2. Definir la URL con la que se abrirá la conexión. 3. Recibir y mostrar la respuesta del servidor.

1.4.7.4 Resultado esperado

Se establecerá comunicación con un servidor de mapas para enviar una petición GET y recibir un mapa a través del protocolo HTTP en el dispositivo móvil.

Page 139: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo C

126

1.4.8 APISMSMMS-08 Visualizar e interactuar con el mapa

1.4.8.1 Propósito

Visualizar e interactuar con un mapa SVG a través de las teclas del dispositivo móvil para realizar las operaciones: zoom-in, zoom-out, paneo y vista original sobre la imagen.

1.4.8.2 Entorno de prueba

El dispositivo móvil o emulador deberá tener almacenado en algún medio una imagen SVG.

1.4.8.3 Proceso

1. Se ejecutará una aplicación que cargue un mapa y lo muestre en la pantalla del

dispositivo móvil. 2. La aplicación deberá implementar una serie de funciones por medio de un menú de

opciones y botones del dispositivo móvil. 3. El usuario deberá interactuar con el mapa aplicando las operaciones de zoom-in, zoom-

out, paneo y vista original.

1.4.8.4 Resultado esperado

La imagen del mapa se visualizará y responderá correctamente a cada una de las operaciones que el usuario aplique.

Page 140: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ANEXO D ESTRUCTURA DE UN

MENSAJE MMS En este anexo se presenta de manera detallada la estructura de un mensaje MMS.

Page 141: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo D

128

D.1 Estructura de un MMS La Unidad de Datos de Protocolo (PDU, Protocol Data Unit por sus siglas en inglés) de un mensaje multimedia consiste de cabeceras MMS y del cuerpo del mensaje. El cuerpo del mensaje se puede formar con cualquier tipo de contenido. El MIME multipart (multiparte) se usa en sistemas de e-mail y por lo tanto son compatibles. El tipo de contenido del PDU es application/vnd.wap.mms-message. El tipo de contenido WSP (Protocolo de Sesión Inalámbrica, Wireless Session Protocol por sus siglas en inglés) application/vnd.wap.multipart.related proporciona un ejemplo de cómo el contenido multimedia y la información de presentación se pueden encapsular en un sólo mensaje. La figura D.1 describe el modelo conceptual y ejemplifica la encapsulación de datos de un MMS.

Las cabeceras MMS contienen información específica MMS del PDU, principalmente datos de cómo transferir el mensaje multimedia desde el dispositivo origen hasta el dispositivo destino. En el caso de uso del mensaje multimedia, el cuerpo del mensaje consiste de una estructura multipart/related que incluye objetos multimedia, cada uno en partes distintas, así como una parte de presentación opcional. El orden de las partes no tiene importancia ya que el segmento de presentación contiene instrucciones de cómo se debe representar el contenido multimedia que se va a mostrar y reproducir en el dispositivo móvil. Si éste no existe, la implementación del dispositivo determina como presentar el contenido multimedia.

X-Mms-Message-Type: m-send-req X-Mms-Transaction-ID: 123456 X-Mms-Version 1.0 X-Mms-Message-Class: Personal X-Mms-Expiry: 36000 X-Mms-Priority: Normal From: +15121234567 To: +15121234544 Date: Fri, 17 May 2005 21:30:30-0600 Subject: A multimedia message sample Content-Type: application/vnd.wap.multipart.related;start=˂star˃;… nEntries: 2

Tipo de MIME ID del contenido Localización del contenido

Tipo de MIME ID del contenido Localización del contenido

Texto o datos binarios

Texto o datos binarios

Figura D.1 Modelo de encapsulación de datos MMS.

Fuente: WAP Forum.

Page 142: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo D

129

El cuerpo del mensaje sólo se usa cuando el mensaje multimedia se envía o recibe. Los otros PDUs contienen sólo las partes de las cabeceras MMS. La API WMA 2.0 (Wireless Messaging API) para J2ME define cuatro representaciones o tipos de mensajes (ver figura D.2). Además específica un message part (parte de mensaje) para soportar mensajes multipart, usado para transportar mensajes multimedia. Los tipos de mensaje son:

Message Interface. La interfaz javax.wireless.messaging.Message es la base para todos los tipos de mensajes que se usan en WMA, un Message representa lo que se envía y recibe.

BinaryMessage Interface. Representa un mensaje con contenido binario, generalmente un mensaje binario corto basado en SMS. Se codifica usando datos de 8 bits, permitiendo 140 bytes por segmento o 133 si se usa un número de puerto.

Text Message Interface. Representa un mensaje que contiene texto, generalmente un mensaje de texto corto SMS. La codificación de los caracteres usada afecta el tamaño del mensaje. Por ejemplo, GSM 7-bit permite 160 caracteres por segmento o 152 si se usa un número de puerto.

Multipart Message Interface. Representa un mensaje que consiste de múltiples partes, generalmente un mensaje multimedia MMS. Esta interfaz define un contenedor para uno o más MessageParts y proporciona métodos para administrar las direcciones del remitente y destinatario, las cabeceras del mensaje, el ID del contenido “start message” y las partes del mensaje.

Message Part Class. Representa una parte de un mensaje. Esta clase proporciona métodos para recuperar el contenido e información acerca de éste.

Figura D.2 Interfaces y subinterfaces de un mensaje WMA.

Fuente: Sun microsystems (Sun Developer Network, SDN).

Page 143: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo D

130

D.2 Enviar un mensaje multimedia La transacción Send de un mensaje multimedia consiste de dos mensajes: M-Send.req y M-Send.conf. El identificador de la transacción lo crea y usa el cliente MMS origen y es único dentro de la transacción send. Los campos de la cabecera del M-Send.req se usan para generar la notificación MMS al destinatario y se entregan con las partes del cuerpo del mensaje al cliente MMS que recibe el mensaje (ver tabla D.1).

Tabla D.1 Campos de cabecera de un PDU M-Send-req.

Nombre del campo Valor Descripción

X-Mms-Message-Type Message-type-value = m-send-req

Obligatorio. Especifica el tipo de PDU.

X-Mms-Transaction-ID Transaction-id-value Obligatorio. Identificador único para el PDU. Identifica el M-Send.req y su correspondiente respuesta.

X-Mms-MMS-Version MMS-version-value Obligatorio. Número de la versión MMS.

Date Date-value Opcional. Fecha y hora del envío del PDU M-Send.req.

From From-value Obligatorio. Dirección del cliente MMS origen.

To To-value Opcional. Al menos uno de estos campos: To, Cc o Bcc debe estar presente.

Cc Cc-value Dirección del destinatario.

Bcc Bcc-value Opcional. Dirección del destinatario.

Subject Subject-value Opcional. Asunto del mensaje multimedia.

X-Mms-Message-Class Message-class-value Opcional. Clase del mensaje multimedia.

X-Mms-Expiry Expiry-value Opcional, default: maximum. Periodo de tiempo que se almacenará el mensaje.

X-Mms-Delivery-Time Delivery-time-value Opcional, default: immediate.

X-Mms-Priority Priority-value Opcional, default: Normal.

X-Mms-Sender- Visibility

Sender-visibility-value Opcional. El origen del mensaje multimedia puede decidir si muestra o esconde su dirección.

X-Mms-Delivery- Report

Delivery-report-value Opcional. Especifica si el cliente MMS origen solicita un reporte de entrega de cada destinatario.

X-Mms-Read-Report Read-report-value Opcional. Especifica si el cliente MMS origen desea leer un reporte de cada uno de los destinatarios.

X-Mms-Store Store-sent-value Opcional. Especifica si el cliente MMS origen desea que el mensaje enviado se guarde en la bandeja del usuario.

X-Mms-MM-State MM-state-value Opcional. Especifica el valor a enviar en el campo State MMS del mensaje multimedia almacenado.

X-Mms-MM-Flags MM-flags-value Opcional. Especifica una clave a agregar o quitar de la lista de claves

Page 144: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo D

131

asociadas con un mensaje multimedia almacenado.

X-Mms-Reply- Charging

Reply-charging-value Opcional. Este campo sólo debe estar presente si el origen está dispuesto a pagar por el Reply-MM del destinatario.

X-Mms-Reply- Charging-Deadline

Reply-chargingdeadline- value

Opcional. Esta campo no debe estar presente si el X-Mms-Reply-Charging no se especifica. Define el tiempo máximo de un destinatario para enviar el Reply-MM.

X-Mms-Reply- Charging-Size

Reply-charging-sizevalue Opcional. Se especifica sólo si el campo X-Mms-Reply-Charging está presente. Define el tamaño máximo (número de octetos) para el Reply-MM.

Cuando el MMS Proxy-Relay recibe el PDU M-Send-req, éste envía un PDU M-Send.conf de regreso al cliente MMS indicando el estado de la operación (tabla D.2).

Tabla D.2 Campos de cabecera del PDU M-Send.conf.

Nombre del campo Valor Descripción

X-Mms-Message-Type Message-type-value = msend- conf

Obligatorio. Especifica el tipo de PDU.

X-Mms-Transaction-ID Transaction-id-value Obligatorio. Identifica el M-Send.conf y su correspondiente M-Send.req.

X-Mms-MMS-Version MMS-version-value Obligatorio. El número de versión del MMS.

X-Mms-Response-Status Response-status-value Obligatorio. Estado específico del MMS.

X-Mms-Response-Text Response-text-value Opcional. Descripción de las cualidades del Response-status-value.

Message-ID Message-ID-value Opcional. Es una referencia única que se asigna al mensaje multimedia. Este ID siempre debe estar presente después de que el MMS Proxy-Relay acepta el correspondiente PDU M-Send.req.

X-Mms-Content- Location

Content-location-value Opcional. Debe aparecer sólo si el MMS Proxy-Relay soporta la característica de MMBox – el campo X-Mms-Store estuvo presente en el M-Send-req y el estado del X-Mms-Store-Status indica éxito.

X-Mms-Store-Status Store-status-value Opcional. Debe aparecer sólo si el campo X-Mms-Store estuvo presente en el M-Send-req y el MMS Proxy-Relay soporta la característica MMBox. Si el campo aparece indica que el mensaje multimedia enviado fue almacenado correctamente en el MMBox.

X-Mms-Store-Status- Text

Store-status-text-value Opcional. Describe las cualidades del valor del campo X-Mms-Store-Status.

Además de los campos de cabecera para enviar un mensaje multimedia, también existen cabeceras para notificar, recuperar, reportar y acusar de recibido. La información de los campos de cada una de estas cabeceras se define en el documento OMA-MMS-ENC-V1_2-20050301-A Multimedia Messaging Service Encapsulation Protocol especificado por OMA.

Page 145: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo D

132

D.3 Tipos de contenido de un MMS

El estándar MMS no especifica un formato de contenido obligatorio para un mensaje multimedia. Alternativamente, los MMS se encapsulan de manera estándar para que el dispositivo receptor sea capaz de identificar los formatos que no soporta y los maneje de una forma controlada.

Para lograr interoperabilidad en el servicio MMS, Nokia y algunos otros fabricantes han definido un conjunto mínimo de requerimientos y normas en el Documento de Conformidad de MMS (MMS Conformance Document). De acuerdo con este documento, los formatos de imágenes a usar en un mensaje MMS son:

Base line JPEG con JFIF como formato de intercambio.

GIF87a.

GIF89a.

WBMP.

La resolución máxima de una imagen para la cual la está garantizada la interoperabilidad es de 160x120 píxeles.

Page 146: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

ANEXO E DISPOSITIVOS MÓVILES QUE SOPORTAN JSR 226

En este anexo se presenta una lista de dispositivos móviles que soportan la API JSR 226.

Page 147: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo E

134

JSR 226 es el estándar para gráficos interactivos y animaciones 2D para la plataforma J2ME, desarrollado dentro del Proceso de la comunidad Java (JCP). Define una API para gráficos 2D que ofrece métodos para cargar y visualizar archivos SVG Tiny así como para manipular y crear contenido en este formato. En la tabla E.1 se presenta una lista de algunos dispositivos móviles conocidos con configuración CLDC 1.1 y perfil MIDP 2.0 que soportan la API JSR 226.

Tabla E.1 Dispositivos que soportan la API JSR 226.

Dispositivo Configuration

Java

Plataforma Java Tamaño de la

pantalla

Generic/multi CLDC/1.1 MIDP/2.0

Motorola/i580 CLDC/1.1 MIDP/2.0 176x220

Motorola/i670 CLDC/1.1 MIDP/2.0 176x220

Motorola/i760 CLDC/1.1 MIDP/2.0 176x220

Motorola/i850 CLDC/1.1 MIDP/2.0 176x220

Motorola/i855 CLDC/1.1 MIDP/2.0 176x220

Motorola/i875 CLDC/1.1 MIDP/2.0 176x220

Motorola/ic502 CLDC/1.1 MIDP/2.0 128x160

Nokia/5200 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/5300 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/5500 CLDC/1.1 MIDP/2.0, JTWI/1.0 208x208

Nokia/5700 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/5700_XpressMusic CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6085 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/6086 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/6110 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6110_Navigator CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6120 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6120_classic CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6125 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/6126 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6131 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6131_NFC CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6133 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6136 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/6151 CLDC/1.1 MIDP/2.0, JTWI/1.0 128x160

Nokia/6233 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6234 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6280 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6282 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6288 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6290 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/6300 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/7373 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/7390 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/8800_Sirocco_Edition CLDC/1.1 MIDP/2.0, JTWI/1.0 208x208

Nokia/E50 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/E51 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/E60 CLDC/1.1 MIDP/2.0, JTWI/1.0 352x416

Nokia/E61 CLDC/1.1 MIDP/2.0, JTWI/1.0 320x240

Nokia/E61i CLDC/1.1 MIDP/2.0, JTWI/1.0 320x240

Page 148: Centro Nacional de Investigación y Desarrollo Tecnológico · Pocket PCs que soporten la configuración CLDC 1.1 y el perfil móvil MIDP 2.0 de Java. La idea es aprovechar la tecnología

Anexo E

135

Nokia/E62 CLDC/1.1 MIDP/2.0, JTWI/1.0 320x240

Nokia/E65 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/E70 CLDC/1.1 MIDP/2.0, JTWI/1.0 352x416

Nokia/E90 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/E90_Communicator CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N3250 CLDC/1.1 MIDP/2.0, JTWI/1.0 176x208

Nokia/N71 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N72 CLDC/1.1 MIDP/2.0, JTWI/1.0 176x208

Nokia/N73 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N75 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N76 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N77 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N80 CLDC/1.1 MIDP/2.0, JTWI/1.0 352x416

Nokia/N81 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N81_8GB CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N82 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N91 CLDC/1.1 MIDP/2.0, JTWI/1.0 176x208

Nokia/N91_8GB CLDC/1.1 MIDP/2.0, JTWI/1.0 176x208

Nokia/N92 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N93 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N93i CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N95 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/N95_8GB CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Nokia/Series60E3 CLDC/1.1 MIDP/2.0, JTWI/1.0 176x208

Sony-Ericsson/JavaPlatform8 CLDC/1.1 MIDP/2.0, MSA/1.0

Sony-Ericsson/K630 CLDC/1.1 MIDP/2.0 176x220

Sony-Ericsson/K660 CLDC/1.1 MIDP/2.0 176x220

Sony-Ericsson/K850 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Sony-Ericsson/K850i CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Sony-Ericsson/V640 CLDC/1.1 MIDP/2.0 176x220

Sony-Ericsson/W760 CLDC/1.1 MIDP/2.0 240x320

Sony-Ericsson/W910 CLDC/1.1 MIDP/2.0 240x320

Sony-Ericsson/W960 CLDC/1.1 MIDP/2.0, JTWI/1.0 240x320

Sony-Ericsson/Z750 CLDC/1.1 MIDP/2.0 240x320

Sony-Ericsson/Z770 CLDC/1.1 MIDP/2.0 240x320

La lista de 76 dispositivos de la tabla anterior se puede obtener a través de la siguiente URL: http://devices.j2mepolish.org/interactivedb/searchdevices.faces?term=polish.api.svg&configuration=CLDC%2F1.1&platform=MIDP%2F2.0&columns%3Djavaconfiguration%2Cjavaplatform%2Cscreensize&s

orting=identifier.