Creación de aplicaciones para BlackBerry con herramientas de código abierto, parte 3: Compilación de una aplicación de redes sociales

El fenómeno más intrigante y poderoso en la era digital es el impacto de las aplicaciones de redes sociales en el consumidor y en los mercados empresariales. Los profesionales de marketing están cambiando la forma en que interactúan con clientes prospectos, los grupos de iguales se pueden formar fácilmente y, como se demostró en otoño de 2008, las redes sociales pueden ser parte de una campaña política exitosa. En combinación con la popularidad y el poder de la plataforma de BlackBerry, tiene los elementos necesarios para una combinación dinámica. La parte 3 de esta serie "Cree aplicaciones de BlackBerry con herramientas de código abierto" explora la forma en que BlackBerry es un gran dispositivo para grabar y desplegar aplicaciones de redes sociales.

Frank Ableson, Author

Después de que terminara su carrera basquetbolista colegial sin un contrato multianual para jugar para los Lakers de Los Ángeles, Frank Ableson cambió su enfoque hacia el diseño de software informático. Disfruta solucionando problemas complejos, particularmente en las áreas de comunicaciones e interfaces de hardware. Cuando no está trabajando, está pasando el tiempo con su esposa Nikki y sus hijos. Es posible contactar a Frank escribiendo a frank@cfgsolutions.com.



31-03-2014

Antes de comenzar

Esta serie explora la tecnología de código abierto y Java™ para el desarrollo de aplicaciones de BlackBerry en el contexto de una aplicación móvil de recolección de datos. La Parte 1 proporciona una introducción al desarrollo de BlackBerry con una introducción rápida a la plataforma, un tour por las herramientas de desarrollo de BlackBerry y una construcción de una aplicación completa de recolección de datos. La Parte 2 explora el formato de distribución de datos de RSS al crear un lector de RSS de BlackBerry.

Este tutorial es para desarrolladores de Java interesados en el desarrollo de aplicaciones de BlackBerry en el contexto de aplicaciones de redes sociales. El ejemplo demuestra una aplicación rudimentaria de redes sociales que aprovecha las herramientas de desarrollo de BlackBerry disponibles gratuitamente. La experiencia en desarrollo móvil es útil, pero no se requiere. Se requieren habilidades de programación de Java para aplicaciones de BlackBerry, pero no son un requisito explícito para este tutorial. Asimismo, la familiaridad con los conceptos de redes sociales es útil, pero no necesaria.

Acerca de este tutorial

¿Por qué grabar una aplicación de redes sociales para BlackBerry? Las redes sociales están de moda, y las personas quieren llevar esta experiencia con ellas a donde vayan. Muchos usuarios de redes sociales llevan consigo dispositivos de BlackBerry. La plataforma de BlackBerry es rica y madura para las redes sociales. Sus posibilidades como un dispositivo de acceso a internet son sólidas, su reputación como una plataforma de mensajería es legendaria y un importante dispositivo que la mayoría de los dispositivos de BlackBerry se jactan de tener es un teclado completo. Tener una cámara es práctico, pero el poder está en un teclado en el que los usuarios pueden escribir mensajes rápidamente a amigos o socios de negocios. El entorno de BlackBerry también presenta una infraestructura de programación donde puede "atrapar" o enganchar muchos eventos de interés. Estas capacidades abren muchas posibilidades para aplicaciones de redes sociales ricas en dispositivos.

Este tutorial no está particularmente abriendo nuevos caminos; ya existen aplicaciones de redes sociales disponibles comercialmente para la BlackBerry. La aplicación muestra de este tutorial demuestra cómo compilar una aplicación útil de código abierto enfocada alrededor de las redes sociales. Aprenda a añadir un menú personalizado en una aplicación e implemente el dispositivo "Share this Event" que resalta la interacción con la base de datos de contactos y los eventos de calendario en la BlackBerry. Los contactos y eventos son parte de un conjunto de datos más grande y general conocido como Gestión de Información Personal (PIM). Una vez que entienda cómo interactuar con los datos de PIM en un dispositivo, las oportunidades de redes sociales son limitadas solo por la imaginación.

Este tutorial proporciona una breve introducción a los datos de PIM, después se adentra en los requisitos para una aplicación de redes sociales de BlackBerry. Descargue el código de origen completo para la aplicación de ejemplo de BlackBerry.

Requisitos del sistema

Este tutorial demuestra cómo utilizar las herramientas de desarrollo de BlackBerry para construir una aplicación de redes sociales de código abierto para la BlackBerry. Necesitará BlackBerry Java Development Environment (JDE) o su equivalente para construir la aplicación.

Resaltes del código de muestra

En este tutorial, una aplicación de redes sociales llamada IBMCalendar es construida para la BlackBerry. A medida que avance, intente pensar más allá de las bases; estos datos pueden ser utilizados en las aplicaciones de redes sociales que usa actualmente. Descargue el código de origen. Los fragmentos incluyen:

ContactList
Para trabajar con una lista de contactos de la base de datos de PIM.
IBMCalendar
La clase Application , y contiene el punto de entrada de la aplicación.
IBMCalendar constructor
Método que demuestra cómo añadir un elemento de menú a las aplicaciones incorporadas de BlackBerry.
CalendarMenus
Clase que contiene el elemento Menu UI, el cual es añadido a la aplicación de calendario/agenda en la BlackBerry.
CalendarMenus.run()
Método invocado cuando un usuario selecciona el menú personalizado añadido a la aplicación DateBook.
CalendarMenus.toString()
Método que suena bastante simple (y lo es), pero que es muy importante. Aquí es donde el nombre textual (o la etiqueta) del menú es controlado.
CalendarMenus.handleCalendarEvent()
Método invocado cuando las entradas de agenda o eventos son manipulados por el menú personalizado añadido a la aplicación de agenda.
BlackBerryContactList
Clase empleada para proporcionar una búsqueda de contacto para encontrar la dirección de email de un usuario. Esta clase demuestra la interacción con la base de datos de PIM desde un alto nivel.
Event y Contact
Clases utilizadas para extraer datos desde la base de datos de PIM de BlackBerry.
SendEmail
Clase que interactúa con la infraestructura de mensajería de la BlackBerry para enviar un email en forma programática.

Bases de PIM

Antes de entrar a la instalación del JDE de BlackBerry y compilar la aplicación, cubramos algunas bases de PIM.

Elementos de datos de PIM

Los elementos de datos más comunes y universales en un dispositivo móvil, incluyendo la plataforma de BlackBerry, incluyen:

Direcciones o contactos
Como el número telefónico del trabajo de tu primo
Eventos de calendario/agenda
Como una cita para comer con un cliente prospecto el siguiente jueves
Elementos de cosas por hacer
Por ejemplo, llevar leche y huevos a casa de la tienda de comestibles

Estos elementos de datos han estado con nosotros desde siempre, o al menos desde que la Palm Pilot revolucionó el mercado de Asistentes Personales Digitales (PDAs) hace algunos años. En conjunto, los elementos de datos son conocidos como elementos de PIM.

Todas las principales plataformas móviles soportan estos elementos de datos y soportan el software de escritorio común como Microsoft® Outlook, Lotus Notes®y muchas otras suites de aplicaciones de productividad. Una industria entera de software de sincronización ha crecido alrededor de la aparentemente simple, pero complicada, tarea de sincronizar datos de PIM entre diversos orígenes de datos. La sincronización de datos entre el dispositivo de BlackBerry y el escritorio (o entornos de servidor) es un tema amplio y no es el enfoque de este tutorial.

Este tutorial se enfoca en la interacción con los datos de PIM directamente en el dispositivo por dos razones:

  • Muchos usuarios no sincronizan realmente sus datos con una aplicación de escritorio. Si la sincronizan, lo hacen con una aplicación de redes sociales basada en la web.
  • Más importante aún, en el núcleo de una aplicación de redes sociales se encuentran sus datos de PIM. Las redes sociales se tratan de conectar, compartir y, discutiblemente, igualar lo que sus amigos y asociados están haciendo — justo ahora.

A continuación, aprenderá sobre algunos de los paquetes y clases disponibles en el SDK de BlackBerry para interactuar con la base de datos de PIM.

APIs de datos de PIM

Los datos de PIM son utilizados principalmente por tres aplicaciones en la BlackBerry: la libreta de direcciones, la aplicación de calendario y la aplicación de tareas. Con estas aplicaciones, los datos son ingresados, almacenados, recuperados y manipulados. La Figura 1 muestra un evento simple registrado para una cena a las 5 p.m.

Figura 1. Evento en la aplicación de calendario de BlackBerry

Este evento es mostrado en la aplicación de calendario. El resumen del evento es "Dinner with In-Laws" y la ubicación es Taco Bell. Si se profundiza en el evento se puede ver más información.

Figura 2. Detalles de un evento

Puede establecer los tiempos de inicio y fin del evento, especificar un recordatorio para el evento e incluso marcar el evento como recurrente, entre otras cosas. Todo esto está muy bien, pero este tutorial está más interesado en cómo puede interactuar con los datos en forma programática, así que echemos un vistazo a la clase de datos Event con más detalle.

Al trabajar con el SDK o las APIs de BlackBerry para datos de PIM, necesita estar consciente de dos niveles de clases:

javax.microedition.pim
Un paquete que contiene datos genéricos de PIM. Las clases en este paquete son encontradas en dispositivos que van más allá de BlackBerry y representan los PIMItems centrales.
net.rim.blackberry.api.pdap
Un paquete que contiene extensiones específicas de BlackBerry para las clases javax.microedition.pim .

La clase Event en el paquete javax.microedition.pim extiende los PIMItem, una superclase más básica. El PIMItem es un elemento de datos de PIM que contiene una colección de campos de datos. Los PIMItems pueden estar organizados en una PIMList, que es una colección de PIMItems. Los campos específicos soportados por una plataforma particular pueden variar y son determinados por la PIMList en la cual el PIMItem es almacenado.

Los campos de datos dentro de un PIMItem pueden ser de una variedad de tipos de datos. Los tipos de datos comunes son:

  • Cadena
  • Matriz de cadenas
  • Fecha
  • Entero
  • Booleano
  • Binario

La clase PIMItem incluye, como podría esperar, varios métodos getter y métodos de establecimiento para manipular los datos. Cada campo de datos incluye:

  • Una etiqueta para describirlo, como el número de teléfono.
  • Cero o más valores de datos, los cuales son una lista de valores indexada a cero. Los métodos get y set tienen un parámetro index para que ayuden con la gestión de estos datos.
  • Atributos para los valores de datos.
  • Un tipo de datos específico.

Los campos de nombre son identificados por valores enteros definidos en las clases Contact, Event y ToDo . En la Tabla 1 se ve una muestra de nombres de campo y el tipo de datos encontrado en la clase Event .

Tabla 1. Campos de datos de Event de muestra

Nombre de CampoTipo de Dato
Resumen, UbicaciónCadena
Inicio, FinFecha
AlarmaEntero

El valor de datos es en realidad almacenado como un entero largo, el cual es compatible con la clase java.util.Date . Esto será utilizado en el código de aplicación de muestra.

Recuperando datos de PIM

Como se mencionó, PIMItems, tales como Events, Contacts y ToDos, están almacenados en PIMLists. Puede haber múltiples PIMLists disponibles en un dispositivo, aunque normalmente encontrará una sola lista predeterminada de datos de PMI. Para obtener acceso a las listas de datos de PMI, debe obtener una referencia para la base de datos de PIM mediante la clase javax.microedition.pim.PIM : PIM pim = PIM.getInstance();.

El método estático getInstance() recupera una instancia de la base de datos de PIM, la cual es necesaria para operaciones subsecuentes. Esta clase también incluye métodos para abrir PIMLists existentes y para serializar un PIMItem para una cadena de entrada/salida. Estos métodos, toSerialFormat y fromSerialFormat, son normalmente utilizados para copia de seguridad o propósitos de sincronización. No son utilizados en la aplicación de muestra de este tutorial.

La aplicación de muestra emplea el método openPIMList para obtener una PIMList que contenga PIMItems. Existen dos métodos de openPIMList : uno abre la PIMList predeterminada y el otro toma un argumento de Cadena para un específico, llamada PIMList. Puede utilizar el método listPIMLists para obtener una lista de nombres de PIMList disponibles. Este método retorna una matriz de cadenas que contiene un nombre de PIMList en cada elemento de matriz.

La proliferación de clases y métodos que incluyen la palabra "lists" puede ser un poco confusa. Tenga cuidado de notar tipos de datos en la documentación de la API de Java de BlackBerry. La aplicación de muestra simplemente accede la predeterminada PIMList. Sin importar qué método de openPIMList sea empleado, existen dos argumentos necesarios:

pimListType
Puede ser CONTACT_LIST, EVENT_LIST o TODO_LIST
mode
Puede ser READ_ONLY, WRITE_ONLY o READ_WRITE

Una vez que una PIMList es abierta, la aplicación puede acceder a los elementos al emplear una enumeración. Para examinar todos los contactos dentro de una CONTACT_LIST o PIMList particular, puede usar el código en el Listado 1.

Listado 1. Accediendo a los contactos desde la base de datos de PIM

BlackBerryPIMList contactList = (BlackBerryPIMList) 
    pim.openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY);

For (Enumeration eContacts = contactList.items();eContacts.hasMoreElements();)
{
   Contact contact = (Contact) eContacts.nextElement();
// do something with contact
}

Para acceder a un campo dentro de un PIMItem específico, use el método getString() en el Listado 2.

Listado 2. El método getString() para acceder a un campo dentro de un específico PIMItem

String emailAddress = c.getString(Contact.EMAIL,0);

La base de datos de PIM también permite la categorización para una fácil gestión de datos de PIM. Las categorías de PIM no son discutidas en este tutorial, pero son fáciles de implementar.

Hasta este punto, ya sabe cómo se ven los datos de PIM, dónde encontrarlos y cómo acceder a ellos. En la siguiente sección, construirá una aplicación de redes sociales para la BlackBerry.


Redes sociales para la BlackBerry

Esta sección examina cada uno de los elementos principales de la aplicación de muestra, incluyendo los fragmentos de código de origen relevantes. Para empezar, un poco sobre la forma en que la aplicación se desempeña y qué esperar en el código.

Aplicación de redes sociales de ejemplo

La aplicación de muestra, IBMCalendar, es un poco distinta de las aplicaciones en partes anteriores de esta serie. No contiene pantallas de IU propias y está diseñada para interactuar directamente con las aplicaciones de PIM de BlackBerry. Es correcto — no hay pantallas de IU personalizadas. Todo se logra utilizando ganchos y utilidades incorporados para obtener las funciones deseadas.

Una aplicación exitosa debe ser intuitiva para utilizarse o su audiencia de objetivo simplemente no la utilizará. ¿Alguna vez ha visto una aplicación llena de dispositivos, pero que realmente no los utilizó porque no eran fáciles de iniciar y acceder? Para evitar esa situación, la aplicación de muestra:

  • Siempre se ejecuta. Siempre que su BlackBerry se inicia (si acaso alguna vez lo apaga) la aplicación es iniciada. No tiene un icono en el listón de aplicaciones.
  • Instala un menú en la aplicación de calendario, haciendo que nuestra aplicación sea fácil de encontrar y siempre esté disponible. Una aplicación de redes sociales efectiva debe ser intuitiva y extremadamente simple de operar.
  • Presenta una lista de amigos con los que se puede conectar al utilizar un método incorporado de la clase BlackBerryContactList . Los amigos son simplemente todos aquellos que están en su base de datos de contactos.

Las funciones de la aplicación son simples. Siempre que un evento es seleccionado en la aplicación de calendario, puede seleccionar un menú personalizado para Share this Event.

Figura 3. Compartir un evento

Cuando elige compartir el evento, obtiene una lista de sus amigos con los que puede compartirlo.

Figura 4. Eligiendo a un amigo para compartir el evento

Una vez que ha elegido a un amigo para compartir este evento, la aplicación automáticamente envía un email al amigo y lleva al usuario de regreso a la aplicación de calendario. El proceso completo solo requiere un momento. No es invasivo y es fácil de usar.

Ahora que sabe cómo se ve la aplicación, es momento de observar la estructura y el código. Para seguir en la línea de la compilación de la misma aplicación, instale BlackBerry Java Development Environment si aún no lo ha hecho.

Estructura de la aplicación

La aplicación de ejemplo será compilada en partes a lo largo del tutorial. Puede descargar el código de origen completo. La Figura 5 muestra los archivos de origen en uso en la aplicación de muestra.

Figura 5. Archivo de proyecto en el JDE de BlackBerry

Ya que la aplicación no tiene una IU personalizada, no hay una clase dedicada a una pantalla (como en partes anteriores a esta serie). Para iniciar automáticamente sin una IU, seleccione System Module y Auto-Startup en el diálogo de propiedades del proyecto.

Figura 6. Valores del proyecto

En el archivo IBMCalendar.java, observe el código en el Listado 3. Como en cualquier aplicación de Java, la aplicación requiere de un punto de entrada, principal, en IBMCalendar.java.

Listado 3. Método principal del archivo IBMCalendar.java

// IBMCalendar.java
// MSI Services, Inc.
// Frank Ableson
// 973.448.0070
// fableson@msiservices.com
// code free to use for any purpose, commercial or otherwise
package com.msi.ibm;
import net.rim.device.api.ui.*;
import net.rim.blackberry.api.menuitem.*;


// our application 
class IBMCalendar extends UiApplication //implements GlobalEventListener
{
     // application entry point
    public static void main(String[] args)
    {
        System.out.println("main");
         // create an instance of our app
        IBMCalendar theApp = new IBMCalendar();
         // "run" the app
        theApp.enterEventDispatcher();
    }
    // app constructor
    public IBMCalendar()
    {
        // create Menu and add it to the Calendar Application
        CalendarMenus cm = new CalendarMenus(0,"Share this Event");
    
        ApplicationMenuItemRepository.getInstance().addMenuItem
(ApplicationMenuItemRepository.MENUITEM_CALENDAR,cm);
    }
}

El método principal crea una nueva instancia de la clase IBMCalendar , que es una extensión de la clase UiApplication . UiApplication se encuentra en el paquete net.rim.device.api.ui. La clase UiApplication es una clase base para todas las aplicaciones de BlackBerry que tienen una IU.

El constructor de la clase IBMCalendar crea una instancia de la clase CalendarMenus , que se define e implementa en CalendarMenus.java. Una vez que la instancia de CalendarMenus es creada, se añade a la aplicación de calendario con un método en la clase ApplicationMenuItemRepository .

La plataforma de BlackBerry ofrece la oportunidad de añadir menús en aplicaciones incorporadas. No requiere de sucios ataques informáticos o enumeraciones de ventana engañosas, como se requiere con otras plataformas. Este es un dispositivo básico del SKD de BlackBerry en el paquete net.rim.blackberry.api.menuitem.

Para añadir un menú a una aplicación, debe crear una clase que extienda la clase ApplicationMenuItem . Esta clase normalmente tiene tres métodos, aunque la nuestra tiene cuatro para hacer el código un poco más fácil de seguir. Las etapas básicas para implementar un ApplicationMenuItem:

  1. Proporcionar un constructor que opcionalmente pueda permitir que la aplicación configure datos específicos utilizados por el ApplicationMenuItem. Por ejemplo, esto puede verse como pasar un valor de cadena personalizada que desea que su menú personalizado muestre.
  2. El método toString() retorna el nombre que desea que sea mostrado. Este puede ser codificado o generado dinámicamente.
  3. El método run es invocado siempre que su menú sea seleccionado. Requiere de un solo parámetro de tipo Object . Puede examinar este Object para determinar si desea responder a esta selección de menú.

La instancia CalendarMenus es creada en el Listado 4.

Listado 4: Instancia CalendarMenus

CalendarMenus cm = new CalendarMenus(0,"Share this Event");

El texto de menú para esta instancia, "Share this Event", puede ser cualquier valor de cadena que desee, sin embargo, obviamente, debe asegurarse de que es compacto e intuitivo. La implementación de estos métodos en el Listado 5 muestra el código de CalendarMenus.java. Revisaremos los elementos principales de este archivo uno por uno.

Listado 5. CalendarMenus.java

//CalendarMenus.java
// MSI Services, Inc.
// Frank Ableson
// 973.448.0070
// fableson@msiservices.com
// code free to use for any purpose, commercial or otherwise
package com.msi.ibm;
import net.rim.blackberry.api.mail.*;
import net.rim.blackberry.api.mail.event.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.blackberry.api.menuitem.*;
import java.util.Enumeration;

import javax.microedition.pim.Event;
import net.rim.blackberry.api.pdap.BlackBerryEvent;

import javax.microedition.pim.*;
import java.util.Enumeration;
import net.rim.blackberry.api.pdap.*;



class CalendarMenus extends ApplicationMenuItem 
{
    String myname;
    CalendarMenus(int order,String name)
    {    
        super(order);
        myname = name;
    }
    

    //Run is called when the menuItem is invoked
    public Object run(Object context)
    {
        //context object should be an Event
        if (context instanceof Event)
        {
            try
            {
                
                Event evt = (Event) context;

                System.out.println("Handling our Calendar Option");
                java.lang.String s;
                handleCalendarEvent(evt);
            }
            catch (Exception ex)
            {
                System.out.println(ex);
                ex.printStackTrace();
            }
        
        }
        return context;
    }

    //toString should return the string we want to
    //use as the test for the menuItem
    public String toString(){
        return myname;
    }    
    
    
    
    public void handleCalendarEvent(Event e)
    {
      System.out.println("handling Calendar Event [" + e.toString() + "]");
      
      try
      {
        net.rim.blackberry.api.pdap.BlackBerryContactList contactList = 
(BlackBerryContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY);
        Contact c = contactList.choose(null,BlackBerryContactList.
AddressTypes.EMAIL,false);
        if (c == null)
        {
            System.out.println("no contact chosen, bail");
        }
        else
        {
            String emailAddress = c.getString(Contact.EMAIL,0);
            System.out.println(emailAddress);
            
            String eventData = "You're Invited!\n";
            eventData += "What: " + e.getString(Event.SUMMARY,0) + "\n";
            eventData += "Where: " + e.getString(Event.LOCATION,0) + "\n";
            eventData += "When: " + new java.util.Date(e.getDate(Event.START,0)).
toString() + " until " + new java.util.Date(e.getDate(Event.END,0)).toString() + "\n";
            
            System.out.println(eventData);
            
            SendEmail se = new SendEmail(emailAddress,eventData);
            se.start();
        }
        
      }
      catch (Exception ee)
      {
          System.err.println(ee.getMessage());
          ee.printStackTrace();
      }
    }
    
}

Existe un puñado de llamadas de método para System.out.println. Esto es utilizado para propósitos de depuración, ya que es útil ver un rastreo de los métodos que están siendo invocados. Esta técnica es aún más útil en una aplicación que no tiene una IU. Para ver estos datos en el JDE de BlackBerry, vea la ventana Output, la cual puede ser accedida en el menú View o con la combinación de teclas Alt+2 en el JDE.

Al iniciar con el constructor, note que un parámetro es pasado en orden que desee que aparezca en el menú. El ejemplo utiliza cero, lo cual coloca el menú en la parte superior, como se ve en la Figura 3. Este valor es pasado a la superclase. El otro parámetro utilizado en este constructor es un valor de cadena que contiene un nombre para el menú. Este valor es almacenado en la variable de miembro myname. Hasta este punto, el constructor ha hecho su trabajo y esta instancia de la clase CalendarMenus ya está lista.

De regreso en el Listado 2, esta clase es instanciada y empleada en el constructor de la clase IBMCalendar . Una vez que la clase es instanciada, debe ser añadida al menú de la aplicación de su preferencia, lo cual se logra mediante la clase ApplicationMenuItemRepository . El código obtiene una instancia de esta clase a partir del método getInstance estático. El método addMenuItem requiere de dos argumentos:

  • La ubicación donde este menú debe ser añadido
  • Una instancia de CalendarMenu

El ApplicationMenuItemRepository ofrece varias ubicaciones posibles donde el menú puede ser instalado, lo cual se equipara a prácticamente todas las aplicaciones incorporadas. La documentación de RIM Java API Library tiene una referencia completa de las ubicaciones de menú disponibles.

Cuando el menú es seleccionado, el método de ejecución de la clase CalendarMenus es invocado. El único argumento para este método es de tipo Object. Este es interrogado al momento de la ejecución y, si se descubre que es de tipo Event, el código lo procesa. En este caso, el evento es procesado al pasarlo al método handleCalendarEvent. El método handleCalendarEvent realiza tres etapas principales:

  1. Pide al usuario que elija un contacto. Para hacer esto, la base de datos de PIM es accedida y la lista de contactos predeterminada se abre. Una vez que la PIMList está abierta, el método elegido es invocado. Este método inicia una "interfaz usuario de búsqueda" en donde el usuario puede seleccionar un contacto. El segundo argumento, BlackBerryContactList.AddressTypes.EMAIL, instruye al método elegido para mostrar los contactos con direcciones de email. Si no se elige ningún contacto, la aplicación simplemente no realiza ninguna otra acción.
  2. Una vez que un contacto es elegido, los datos del evento son extraídos y se les aplica un formato legible para humanos de "Qué, Dónde, Cuándo". Los valores de "fecha" son utilizados como argumentos para instancias anónimas de java.util.Date. La dirección de email es extraída de la instancia Contact .
  3. Equipado con una dirección de email y un cuerpo formateado de texto, la siguiente etapa es enviar un email.

Enviando un email

La etapa final para la aplicación de redes sociales es el envío de un simple email a un amigo para compartir un Evento de interés. Para hacer esto, la aplicación de muestra implementa una clase llamada SendEmail, encontrada en SendEmail.java.

Listado 6. Enviando el email

// SendEmail.java
// MSI Services, Inc.
// Frank Ableson
// 973.448.0070
// fableson@msiservices.com
// code free to use for any purpose, commercial or otherwise


package com.msi.ibm;

import net.rim.blackberry.api.mail.event.*;
import net.rim.blackberry.api.mail.*;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.component.Dialog;



/**
 * 
 */
class SendEmail extends Thread
{
   boolean bCanSend = false;
   Store msgStore; 
   Folder[] folderList;  
   Folder outFolder;
   Message msg;
   Transport emailTransport;
   String _emailTo,_emailBody;

    SendEmail(String emailTo,String emailBody)
    {    
        try
        {
                Session s = Session.getDefaultInstance();
                if(s == null)
                {
                   String errMsg = "Unabled to send email message.\n";
                   Dialog.alert(errMsg);
                   bCanSend = false;
                }                  
                else
                {
                   bCanSend = true;
                   
                   
                   _emailTo = emailTo;
                   _emailBody = emailBody;
                   
                   emailTransport = Session.waitForDefaultSession().getTransport();
                   msgStore = Session.waitForDefaultSession().getStore();
                   folderList = msgStore.list(Folder.SENT);
                   outFolder = folderList[0];
                   msg = new Message(outFolder);
                }
           
          }
          catch(NoSuchServiceException nse)
          {
               nse.toString();
          } 
      
    }
    
    public void run()
    {
        System.out.println("SendEmail :: running");
        if(bCanSend == true)
        {
            try
            {
                Address [] addresses = new Address[1];
                addresses[0] = new Address(_emailTo, _emailTo);
                msg.addRecipients(Message.RecipientType.TO, addresses);
                msg.setSubject("IBM Calendar Share!");
                msg.setContent(_emailBody);
                emailTransport.send(msg);
            }
            catch(Exception e)
            {
                System.out.println("Exception caught trying to send email: " + 
                   e.toString());
            }
        }
    }
}

SendEmail extiende java.util.Thread. Usted desea que la tarea de enviar un email se realice independientemente de cualquier hebra de IU. La clase es instanciada por un constructor que toma dos argumentos — el recipiente de email y el mensaje formateado. El constructor intenta hacer algo de trabajo de creación de instancias al:

  • Conectarse al subsistema de comunicaciones del dispositivo de BlackBerry.
  • Obtener una referencia de la bandeja de salida.
  • Crear un nuevo mensaje de email, de tipo de clase Message, dentro de la bandeja de salida.

Cuando la clase es iniciada, el mensaje es dirigido y el cuerpo del email es configurado y enviado.

Ejecutando la aplicación

Si está nuevo en el desarrollo de BlackBerry y necesita ayuda para compilar una aplicación en el JDE, vea Resources.

Ha revisado todos los fragmentos de código importantes y es momento de compilar y probar la aplicación. Asumiendo que la aplicación ha sido compilada sin errores, es momento de ejecutarla en el simulador de BlackBerry.

  1. Asegúrese de que el simulador de MDS se está ejecutando. El simulador de MDS permite que el simulador de BlackBerry se conecte a la red, incluyendo Internet.
  2. Seleccione F5 para iniciar el simulador de BlackBerry. La aplicación de muestra del tutorial inicia inmediatamente en segundo plano.
  3. Para probar la aplicación, asegúrese de que su dispositivo tiene algunas entradas de contacto y una entrada de evento. Mientras el evento es resaltado en la aplicación de calendario, seleccione el menú Share this Event .
  4. Elija un contacto. Con un poco de suerte, su amigo recibirá un simple y amistoso email invitándolo a unirse a usted. La Figura 7 muestra la invitación de email.
    Figura 7. Un evento compartido
  5. Pero espere. ¿Su BlackBerry ya tiene un dispositivo llamado Invite Atendee? Adelante, inténtelo. El recipiente recibe un archivo "ics", el cual es un formato estándar para una invitación de reunión. A menos que su cliente de email esté equipado para procesar ese archivo ics, se presenta como un montón de texto que no importa.

La aplicación de redes sociales proporciona un punto de partida para aplicaciones más creativas que usted grabará. En lugar de enviar un email, puede hacer una entrada para un blog, por ejemplo. La única limitación hasta este punto es su imaginación.


Siguientes pasos

Antes de derivarla, estas son algunas notas adicionales.

Firma de la aplicación

Algunas de las interfaces de programación utilizadas en la aplicación de muestra requieren que la aplicación sea firmada para que se ejecute en un dispositivo real de BlackBerry. Para obtener más información sobre cómo firmar una aplicación, ve la Parte 1 de esta serie.

Manejo de errores

El manejo de errores fue omitido de este tutorial para hacerlo más breve y claro. Por supuesto, cualquier código listo para la producción debe tener una dosis sana de manejo de errores e instrucciones para el usuario en el evento que le indique que algo no está bien.

Múltiples recipientes

La aplicación de muestra le permite compartir su evento solo con un amigo. Como una mejora sencilla, puede añadir múltiples recipientes a la invitación de email al llamar repetidamente el método contactList.choose() hasta que una respuesta nula es retornada. Para cada contacto válido recibido de la invocación del método elegido, añada el contacto a un vector. Después, para cada entrada de contacto, añada una dirección individual, la cual es después añadida al mensaje. Presto! Múltiples invitaciones para un evento.


Resumen

En este tutorial, exploró las capas de PIM de la plataforma de BlackBerry. Aprendió sobre un práctico dispositivo que le permite añadir sus propias funciones para aplicaciones de BlackBerry incorporadas. Utilizando la extensión de BlackBerry de la PIMList, realizó una búsqueda muy sencilla para obtener la dirección de email de un amigo para invitarlo a algo que está ocurriendo en su calendario.

Aprovechar la tecnología de código abierto de la tecnología Java y la ubicuidad de los datos de PIM en una aplicación de redes sociales para la plataforma móvil más visible y venerada tiene gran potencial para llevar valor a las aplicaciones empresariales y de consumidor por igual. ¿Quién sabe? Tal vez su aplicación de redes sociales es el siguiente Facebook o Twitter.


Descargar

DescripciónNombretamañoMetodo de descarga
IBM Calendar source codeos-blackberry3-IBMCalendar.zip16KBHTTP

Información sobre métodos de descarga

Recursos

Aprender

  • Vea la Parte 1 de esta serie, la cual sienta las bases para una aplicación de recolección de datos de código abierto sobre las cuales un servicio de recolección de datos accesible y fácil de usar es compilado. Y no se pierda la Parte 2, la cual explora el formato de distribución de datos de RSS al crear un lector de RSS de BlackBerry adecuado para recibir noticias donde sea que vayan usted y su BlackBerry.
  • BlackBerry Desktop Software: Research In Motion (RIM) ofrece la gama completa de información útil de usuario y administrador sobre BlackBerry Desktop Software, incluyendo más información sobre la instalación del software mediante el Desktop Manager.
  • Aprenda más sobre los datos de Gestión de Información Personal con especificaciones de tecnología de Java.
  • Encontrará artículos sobre todos los aspectos de la programación de Java en la zona de tecnología de Java de developerWorks.
  • OpenSource.org presenta un catálogo de las licencias de código abierto más populares.
  • Aprenda más sobre la historia de RSS de Harvard Law.
  • Para escuchar entrevistas interesantes y discusiones para desarrolladores de software, escuche los Podcasts de developerWorks.
  • Manténgase actualizado(a) con los eventos técnicos y webcasts developerWorks.
  • Siga a developerWorks en Twitter.
  • Consulte las próximas conferencias, ferias comerciales, webcasts y otros Eventos en todo el mundo que sean de interés para los desarrolladores de código abierto de IBM.
  • Visite la zona Open source de developerWorks para obtener información extensa de how-to, herramientas y actualizaciones de proyecto para ayudarle a desarrollar con tecnologías de código abierto y utilizarlas con productos de IBM.
  • Vea y aprenda sobre tecnologías de IBM y de código abierto y funciones de producto con las gratuitas Demostraciones on demand de developerWorks.

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Desarrollo móvil
ArticleID=858226
ArticleTitle=Creación de aplicaciones para BlackBerry con herramientas de código abierto, parte 3: Compilación de una aplicación de redes sociales
publish-date=03312014