Programando para la Blackberry – Everlasting Flame
Ver primera parte: Intro
En la introducción se vió un poco sobre lo que es programar una aplicación para la BlackBerry haciendo un pequeño “Hola Mundo” muy sencillo. Ahora toca explicar las bases de la aplicación que se menciona en aquel post llamada “Everlasting Flame”. El nombre es el título de una canción del grupo de Thrash Aleman Kreator. Tengo la mala costumbre de nombrar a todos mis proyectos con titulos de canciones metaleras.
Primero un poco de teoría. Las aplicaciones de BlackBerry pueden ser de dos tipos: sin GUI o con GUI. Típicamente el punto de entrada de las que tienen GUI es cuando el usuario selecciona el ícono correspondiente en la pantalla. Las que no tienen GUI generalmente cuentan con otro punto de entrada, como al momento de hacer una llamada telefónica, enviar un SMS, solicitar datos, etc. En nuestro caso nuestra aplicación es sin GUI y su punto de entrada es al momento de realizar una llamada telefónica.
En el API de RIM hay dos clases que nos interesan actualmente: Applicationy UiApplication para aplicaciones sin UI o con UI, respectivamente. También nos interesa el PhoneListener que nos sirve para registrar una clase que consume los eventos generados por la aplicación de teléfono en la BlackBerry. También nos interesa la clase Phone que nos permite interactuar con la aplicación que se encarga de marcar el teléfono en la BlackBerry.
Como se mencionó en el post de introducción, el funcionamiento es el siguiente: marco un número e inicia un contador. Si llego a un determinado número de segundos (soft limit) el teléfono me avisa inyectando un tono DTMF a la llamada. Si llego a otro límite mayor (hard limit) la llamada se termina automáticamente. Para esto vamos a usar las clases antes mencionadas.
Nuestro programa consta básicamente de 2 clases: la clase principal que extiende a Application, y una clase que implementa la interfaz PhoneListener, o más específicamente extiende a AbstractPhoneListener, misma que implementa a PhoneListener y nos evita el tener que implementar todos los métodos abstractos de PhoneListener, enfocándonos solo a aquellos que necesitamos.
Leer el resto de este post.




