Академический Документы
Профессиональный Документы
Культура Документы
Clases
RecordStore
Interfaces
RecordComparator
RecordEnumeration
RecordFilter
RecordListener
Excepciones
InvalidRecordIDException
RecordStoreException
RecordStoreFullException
RecordStoreNotFoundException
RecordStoreNotOpenException
(mtodo sobrecargado).
Cerrar la comunicacin con un RecordStore. Mtodo closeRecordStore.
Para la manipulacin de los registros de un RecordStore dispones, entre otras, de las
siguientes operaciones:
Aadir un nuevo registro (mtodo addRecord).
Obtener el contenido de un registro (mtodo getRecord).
Eliminar un registro (mtodo deleteRecord).
Modificar un registro (mtodo setRecord)
Obtener el nmero de registros (mtodo getNumRecords).
3.4.- Operaciones avanzadas en un almacn de registros.
Interfaz RecordEnumeration, para facilitar la navegacin a travs de los registros.
Interfaz RecordFilter, que puede ayudarte a realizar bsquedas ms eficientes mediante
el uso de un patrn de bsqueda.
Interfaz RecordComparator, que proporciona los mtodos necesarios para la
ordenacin de registros.
Interfaz RecordListener, cuyos mtodos te permitirn capturar los eventos que se
produzcan cuando se realice una determinada accin.
4.- Conectividad.
Una de las mayores ventajas de los dispositivos mviles es la posibilidad de estar siempre (o
casi siempre) vinculados a algn tipo de conexin, con la plataforma Java SE, se utilizan las
clases (InputStream, OutputStream, InputStreamReader, BinaryArrayInputStream,
DataInputStream, Reader, Writer, etc.) se encuentran en el paquete java.io.
4.3.- Conexiones soportadas.
El marco de conexiones genrico GCF soporta una gran cantidad diferente de conexiones. Los
tipos de conexiones pueden identificarse a travs de la URL (localizador de recursos
uniforme) que se utilice.
Principales esquemas de URL para la GCF
Esquema
Tipo de conectividad
blt2cap
Bluetooth.
datagram
Datagramas.
file
http
https
sms
mms
cbs
apdu
jcrmi
socket
serversocket
datagram
HttpConnection
HttpsConnection
MessageConnection
APDUConnection
JavaCardRMIConnection
SocketConnection
ServerSocketConnection
UDPDatagramConnection
Interfaces
FileConnection
FileStystcodeListener
Excepciones
ConnectionClosedException
IllegalMode Exception
Recuerda que este tipo de tareas en las que se realizan operaciones de E/S
deberas realizarlas dentro de un hilo de ejecucin diferente al hilo principal de la
aplicacin. De ese modo, si por alguna razn la operacin tarda ms tiempo del
esperado (o se produce algn tipo de bloqueo), la aplicacin no quedara
bloqueada.
en
el
modelo
Para obtener informacin relacionada con un dispositivo Bluetooth la API proporciona las
siguientes herramientas:
La clase LocalDevice, que representa el dispositivo local. Ser el punto de partida de
6.4.Descubrimiento
DiscoveryListener.
de
nuevos
dispositivos.
La
interfaz
10
...
6.5.1.- Bsqueda de servicios (II).
Finalmente, para llevar a cabo el descubrimiento de servicios Bluetooth disponibles en el
entorno, tendras que implementar los mtodos deviceDiscovered, servicesDiscovered y
serviceSerarhCompleted de la interfaz DiscoveryListener.
En el siguiente fragmento de cdigo tienes un ejemplo de cmo implementar estos mtodos
suponiendo que se est buscando un servicio con UUID 0x0008 (OBEX) y contenido en un
atributo con identificador 0x7777:
11
12
13
14
Conector puedes obtener una nueva conexin para poder enviar o recibir tus mensajes
de texto.
Por tanto, para crear esa conexin bastara con hacer algo as:
MessageConnector msgCon= (MessageConnector) Conector.open (<direccion>);
Donde <direccion> sera una URL que indicara en este caso un nmero de telfono. El
formato de la cadena de conexin es de la forma sms://<nmero_telfono>. Por ejemplo:
"sms://+34666777444".
De esa forma habras creado una conexin en modo cliente, que podra ser utilizada para
enviar mensajes.
De una manera similar tambin podras crear una conexin en modo servidor indicando un
nmero de puerto:
MessageConnector msgCon= (MessageConnector) Conector.open (sms://:1234);
Una vez que dispongas de una conexin abierta, sta puede ser usada para:
Crear mensajes.
Enviar mensajes.
Recibir mensajes (modo servidor).
Obtener informacin de segmentacin sobre un mensaje.
15
Crear la conexin.
Crear el mensaje.
Establecer el contenido del mensaje.
Enviar el mensaje.
Cerrar la conexin.
16
Dado que una llamada al mtodo send se queda esperando la llegada de un mensaje (no se
siguen ejecutando otras instrucciones), sta debera realizarse siempre desde su propio hilo de
ejecucin (thread) para no detener la ejecucin de toda la aplicacin (dara la impresin de
que se ha quedado bloqueada, pues no se harn ms cosas hasta que la llamada a send reciba
un mensaje, cosa que no se sabe cunto puede tardar en suceder). Lo ms habitual es crear un
hilo especfico de recepcin dentro de la aplicacin, como sucede en la programacin de
cualquier de aplicacin que implementa algn tipo de servicio.
Ese hilo de ejecucin para recepcin podra ser liberado posteriormente mediante el cierre
de la conexin MessageConnection. En tal caso se lanzar la excepcin
InterruptedIOException si la conexin es cerrada mientras la ejecucin estaba bloqueada
por una llamada a send (estaba a la espera de un mensaje y an no lo haba recibido).
7.4.1.- Un oyente
MessageListener.
para
la
recepcin
de
mensajes.
La
interfaz
Existe una alternativa para recibir mensajes sin tener que estar comprobndolo continuamente
(y por tanto bloqueando el hilo de ejecucin en espera de un mensaje). Para eso, el paquete
javax.wireless.messaing incorpora la interfaz MessageListener, que incluye el mtodo
notifyIncomingMessage. Este mtodo ser llamado cada vez que el dispositivo reciba un
mensaje.
Podras tener un midlet que implementara la interfaz MessageListener y que en el mtodo
notifyIncommingMessage actuar en consecuencia cada vez que se reciba una
notificacin de mensaje entrante. En realidad la comprobacin de llegada de mensajes se
estar realizando desde algn otro hilo lanzado por la mquina virtual y cada vez que se
produzca una recepcin se notificar al oyente que se haya establecido (por ejemplo el midlet) a
travs de la llamada al mtodo notifyIncommingMessage. De este modo se nos facilita la
tarea evitndonos tener que definir nosotros un nuevo hilo de ejecucin.
Nuestro midlet (o el componente de la aplicacin que vaya a ser oyente y gestor de ese evento)
tendr implementar la interfaz MessageListener.
17
Por ejemplo:
public class midletOyenteSMS extends midlet implements MessageListener {
Cuando el midlet se inicie, lo registramos como oyente de una conexin para recibir mensajes:
public void startApp () {
conexion= (MessageConnection) Connector.open ("sms://:5000"); // Abrimos la conexin
conexion.setMessageListener(this); // Establecemos como oyente de esta conexin al propio
midlet
...
Y finalmente se define el mtodo notifyIncomingMessage:
public void notifyIncomingMessage (MessageConnection conexion) {
if (conexion == this.conexion) {
Message mensaje= conexion.receive ();// Recibimos el mensaje
// Analizamos el mensaje recibido
...
Aqu tienes un ejemplo de cmo podra quedar la implementacin de un ese mtodo en un
midlet simple sin interfaz grfica:
7.4.2.- Activacin automtica por recepcin mensaje. Push Registry.
En ocasiones es posible que la aplicacin que recoge los mensajes recibidos por el dispositivo no
est en ejecucin. En esos casos existe la posibilidad de registrar para que cuando se produzca
un determinado evento de conexin se active automticamente el midlet. Se trata del
mecanismo conocido como Push Registry.
La API WMA permite lanzar una determinada aplicacin cuando se reciba un nuevo mensaje.
El registro puede realizarse bien a travs del archivo JAD del midlet o bien dinmicamente en
tiempo de ejecucin mediante la clase PushRegistry.
Una entrada en el registro debe incluir:
Una cadena de conexin (URL) que identifique las conexiones entrantes.
18
El nombre del midlet que debe ser lanzado cuando llegue una nueva conexin entrante.
Un filtro que especifica los emisores que tendrn permiso para hacer que se lance el midlet
al mandar un mensaje.
Un ejemplo de entradas midlet-Push en el archivo JAD podra ser:
Si lo que deseas es registrar dinmicamente el midlet desde el cdigo podras entonces que
utilizar la clase PushRegistry:
PushRegistry.registerConnection (sms://:5000, midletRecepcionSMS, *);
19
En el caso de MIDP dispones de un mecanismo para dar permisos a las aplicaciones para que
tengan acceso a funciones privilegiadas del dispositivo. En el caso del envo de
mensajes tendras los siguientes permisos relacionados:
Permiso para acceder a la implementacin de la clase MessageConnection. Si no
se tiene ese permiso, el mtodo Connector.open lanzara una excepcin de tipo
SecurityException.
Permiso para enviar mensajes. Si no se tiene se lanzara tambin una SecurityException.
Permiso para recibir mensajes. Si no se tiene se lanzara nuevamente una
SecurityException.
Permiso para utilizar el mecanismo Push Registry.
Si no se tiene alguno de esos permisos y se intentan realizar operaciones como
Connector.open, send, receive, etc. se lanzar una excepcin de tipo
SecurityException.
Los permisos necesarios para poder realizar estas operaciones sin dar lugar a una excepcin
son:
javax.microedition.io.Connector.sms.
javax.wireless.messaging.sms.send.
javax.wireless.messaging.sms.receive.
javax.wireless.messaging.io.PushRegistry.
La forma ms sencilla de conceder esos permisos a un midlet es a travs del panel de
propiedades del proyecto, dentro de la opcin "Application Descriptor" en la pestaa "API
Permissions".
Aunque tambin podras hacerlo mediante la entrada midlet-Permissions del archivo JAD
del midlet:
midlet-Permissions: javax.microedition.io.Connector.sms, javax.wireless.messaging.mms.send,
javax.wireless.messaging.sms.receive, javax.microedition.io.PushRegistry
20
21
El cuerpo de la parte ser finalmente el contenido en s mismo (un conjunto de bytes que
representan un texto, un sonido, una imagen, etc.).
Aqu tienes otro ejemplo, en este caso para una imagen JPEG:
22
23
24
Por ejemplo:
HttpConnection conexion= (HttpConnection) Connector.open ("http://www.mec.es/");
Una vez creada la conexin, falta indicar:
El tipo de peticin (GET, POST, HEAD). MtodosetRequestMethod.
Las cabeceras que se van a enviar (User-Agent, Connection, Accept, Content-Language,
etc.). Mtodo setRequestProperty.
Por ejemplo:
conexion.setRequestMethod (HttpConnection.GET);
conexion.setRequestProperty ("User-Agent", "Profile/MIDP-20.0 Configuration/CLDC-1.0");
conexion.setRequestProperty ("Content-Language", "es-ES");
En este momento an estamos en el estado de establecimiento de conexin. Pasaramos al
estado conectado en cuanto se comiencen a enviar o recibir datos.
Mientras la conexin permanezca abierta, podrs utilizar los siguientes mtodos: getURL,
getProtocol, getHost y getPort, que proporcionan informacin acerca de la conexin.
25
9.4.- Conexiones HTTPS.
HTTPS es la versin segura del protocolo HTTP. Se basa en el establecimiento de
conexiones HTTP sobre SSL (Secure Sockets Layer). Para poder establecer este tipo de
conexiones dispones del interfaz HttpsConnection, que hereda de HttpConnection.
La forma de trabajar con esta interfaz es idntica a la que has utilizado para las conexiones
HTTP convencionales. La nica diferencia es que en este caso hars uso de un objeto
HttpsConnection.
Por ejemplo:
HttpsConnection conexionSeg (HttpsConnnection) Connector.open ("https://......");
conexionSeg.setRequestMethod (HttpConnection.GET);
conexionSeg.setRequestProperty ("User-Agent", "Profile/MIDP-2.1 Configuration/CLDC-1.1");
...
Los mtodos adicionales que aporta esta interfaz son:
getPort, que devuelve el puerto utilizado para la conexin HTTPS (funcin sobrescrita).
getSecurityInfo, que devuelve la informacin de seguridad asociada a la conexin (objeto
SecurityInfo).
Las conexiones HTTP seguras pueden lanzar la excepcin CertificateException (subclase de
IOException), relacionada especficamente con errores ocurridos en el establecimiento
de conexiones seguras.
La interfaz SecurityInfo proporciona mtodos que permiten acceder a la informacin
asociada a conexiones seguras. Cualquiera de los protocolos que implementa MIDP 2.0
para establecer estas conexiones seguras (HTTP o sockets seguros sobre SSL) pueden utilizar
estos mtodos para conocer los parmetros de seguridad de estas conexiones. En la
siguiente tabla tienes una breve descripcin de estos mtodos:
Mtodo
String getCipherSuite ()
getProtocolName()
getProtocolVersion
Certificate getServerCertificate()
Descripcin
Obtiene una cadena con el nombre del sistema de cifrado
(suite de cifrado) que se est utilizando.
Obtiene el nombre del protocolo seguro al que pertenece la conexin.
Obtiene la versin del protocolo seguro utilizado.
Obtiene el certificado (objeto Certificate) utilizado para establecer
la conexin segura con el servidor.
26
Anexo II.- La plataforma Wireless Toolkit para CLDC. (leer interesante)
Plataforma Sun Java Wireless Toolkit.
La plataforma Sun Java Wireless Tookit consiste en un conjunto de herramientas que
permite la creacin de aplicaciones Java compatibles con tecnologas de dispositivos mviles
que implementan los estndares de Java ME. Est compuesta por herramientas de
generacin de cdigo, utilidades, emuladores de dispositivos y otras herramientas.
Este conjunto de herramientas implementan la mayora de las APIs definidas por la JCP (Java
Community Process.):
Mobile Service Architecture (JSR 248).
Java Technology for the Wireless Industry (JTWI) (JSR 185).
Connected Limited Device Configuration (CLDC) 1.1 (JSR 139).
Mobile Information Device Profile (MIDP) 2.0 (JSR 118).
PDA Optional Packages for the J2ME Platform (JSR 75).
Java APIs for Bluetooth (JSR 82).
Mobile Media API (MMAPI) (JSR 135).
J2ME Web Services Specification (JSR 172).
Security and Trust Services API for J2ME (JSR 177).
Location API for J2ME (JSR 179).
SIP API for J2ME (JSR 180).
Mobile 3D Graphics API for J2ME (JSR 184).
Wireless Messaging API (WMA) 2.0 (JSR 205).
Content Handler API (JSR 211).
Scalable 2D Vector Graphics API for J2ME (JSR 226).
Payment API (JSR 229).
Advanced Multimedia Supplements (JSR 234).
Mobile Internationalization API (JSR 238).
Java Binding for the OpenGL(R) ES API (JSR 239).
Si por alguna razn no tuvieras instalada esta plataforma puedes descargarla de:
Sun Java Wireless Toolkit 2.5.2_01 for CLDC Download (en ingls).
Entre las herramientas incluidas en este paquete tienes por ejemplo la consola WMA, que te
va a proporcionar muchas facilidades a la hora de probar tus midlets que utilizan las
funcionalidades de envo y recepcin de mensajes. Si lo deseas puedes seguir trabajando con la
plataforma incluida por Netbeans como es probable que hayas estado haciendo hasta ahora,
pero es posible que para este tipo de aplicaciones la consola WMA que incorpora esta otra
plataforma te sea de gran ayuda.
Si an no tienes integrada esta plataforma en el IDE de Netbeans puedes hacerlo de la
siguiente manera:
Si no tienes disponible en tu sistema esta plataforma, descrgala del enlace anterior e
27
instlala.
Abre la caja de dilogo "Administrador de Java Platform". Puedes llegar hasta ella a
travs de la opcin de men "Herramientas -> Plataformas Java".
Una vez abierta la caja de dilogo, comprueba si dentro de la categora J2ME tienes instalada
la plataforma "Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC adems de "Java
Platform Micro Edition SDK 3.0", que es la que incorpora inicialmente Netbeans.
Si no est instalada esa plataforma, pulsa el botn "Aadir plataforma".
Se te abrir una nueva caja de dilogo "Aadir plataforma Java". Escoge como tipo de
plataforma "Java MIDP Platform Emulator".
En el segundo paso, "Platform Folders", debera aparecer la opcin de instalar Selecciona
esa opcin marcando su casilla de verificacin.
Si todo ha funcionado correctamente, debera indicar que se ha instalado la plataforma "Sun
Java(TM) Wireless Toolkit 2.5.2 for CLDC" as como algunos detalles como los
emuladores de dispositivo que incorpora o las APIs opcionales que incluye.
A partir de este momento, deberas de tener al menos dos plataformas (si no las tenas ya)
dentro de la categora J2ME:
Java Platform Micro Edition SDK 3.0.
Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC.
Desde de ahora, para cada midlet que vayas a generar, podrs elegir la plataforma con la que
desees trabajar. Eso podrs hacerlo dentro de las propiedades del proyecto, en la seccin
"Platform", en la opcin "Emulator Platform".
Si dentro del administrador de plataformas eliges la opcin "Sun Java(TM) Wireless
Toolkit 2.5.2 for CLDC", y a continuacin, en la pestaa "Tools & Extensions", pulsas el
botn "Open Utilities", obtendrs una ventana con una serie herramientas que te podrn ser
de gran utilidad. Entre ellas se encuentra la "WMA Console" que te permitir, entre otras
cosas, enviar mensajes a los nmeros de telfono que quieras para poder probar la recepcin de
mensajes en los dispositivos que ests emulando en ese momento.
Descripcin
Obtiene la direccin del mensaje.
Obtiene la fecha y hora de envo del mensaje (marca de tiempo "Unix").
Establece la direccin del mensaje.
28
Descripcin
Crea un nuevo mensaje del tipo indicado.
Crea un nuevo mensaje con el tipo y la direccin de destino
indicados.
Devuelve el nmero de segmentos necesarios para enviar
un determinado mensaje.
Descripcin
Devuelve el contenido de un mensaje de texto.
Establece el contenido de un mensaje de texto.
29