Ir a contenido principal

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. Cierta información de su perfil de developerWorks será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo) y nombre de usuario acompañarán el contenido que usted publique.

Toda la información enviada es segura.

  • Cerrar [x]

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.

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

Toda la información enviada es segura.

  • Cerrar [x]
 

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

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.

Resumen:  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.

Ver más contenido de esta serie

Fecha:  18-02-2013
Nivel:  Intermediaria PDF:  A4 and Letter (602 KB | 23 páginas)Get Adobe® Reader®

Comentario:  

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
Sharing an event

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
Choosing a Friend to share event with

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
Project file in BlackBerry JDE

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
Project settings

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
    A shared Eevent

  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.

3 de 8 | Anterior | Siguiente

Comentario



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Desarrollo móvil
ArticleID=858226
TutorialTitle=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=02182013
author1-email=frank@cfgsolutions.com
author1-email-cc=