Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integration Guide
Versin: 7.0
Gua de desarrollo
SWD-1638866-1219123257-005
Contenido
1 Integracin con aplicaciones de BlackBerry Device Software..........................................................................
Invocar una aplicacin de BlackBerry Device Software....................................................................................
6
6
2 Bsqueda unificada...........................................................................................................................................
Hacer que los datos puedan ser encontrados..................................................................................................
Exponer los datos de sus aplicaciones.......................................................................................................
Pasar consultas a otros motores de bsqueda..........................................................................................
Definir una clase EntityBasedSearchable para sus objetos SearchableEntity...................................................
Personalizar la apariencia de sus datos en los resultados de la bsqueda................................................
Especificar un icono en EntityBasedSearchable o en la clase SearchableEntity........................................
Encapsular datos en la clase SearchableEntity.................................................................................................
Specifying what users can do with your data in search results........................................................................
Specify an operation for a selected search result......................................................................................
Provide an alternate entry point for your application...............................................................................
Expose your UiAction objects....................................................................................................................
Registrar su objeto EntityBasedSearchable en el Servicio de bsqueda unificada...........................................
Notificar al Servicio de bsqueda unificada acerca de los cambios hechos a sus datos...................................
Rastrear las respuestas del Servicio de bsqueda unificada............................................................................
Eliminar sus datos del repositorio de contenido..............................................................................................
Utilizar otros motores de bsqueda.................................................................................................................
Asegurar que un dispositivo ejecuta una sola instancia de su aplicacin.........................................................
Insertar datos al iniciar un dispositivo..............................................................................................................
Bsquedas.........................................................................................................................................................
Configurar e iniciar una bsqueda.............................................................................................................
Procesar los resultados de la bsqueda....................................................................................................
7
7
7
9
10
12
13
14
15
16
17
18
19
20
20
21
22
23
25
25
26
27
29
29
29
31
32
32
33
34
35
4 Lista de mensajes..............................................................................................................................................
Crear un mensaje de texto SMS en blanco nuevo............................................................................................
38
38
38
38
39
39
39
40
40
41
41
42
42
42
43
50
50
51
51
53
54
55
5 Mensajes personalizados..................................................................................................................................
Utilizar mensajes y carpetas personalizados en la lista de mensajes...............................................................
Crear un mdulo para procesos en segundo plano..........................................................................................
Crear un mdulo para la IU...............................................................................................................................
Crear un mdulo para procesos en segundo plano..........................................................................................
Iniciar el mdulo para procesos en segundo plano o el mdulo para la IU......................................................
Crear un icono para un mensaje personalizado...............................................................................................
Crear una carpeta personalizada en la lista de mensajes.................................................................................
Enviar una notificacin cuando una carpeta personalizada cambie.................................................................
Crear un indicador personalizado.....................................................................................................................
Ocultar un indicador.........................................................................................................................................
Eliminar indicadores personalizados................................................................................................................
57
57
57
57
58
58
59
60
61
62
63
63
44
46
47
6 Archivos adjuntos.............................................................................................................................................
Crear un gestor de archivos adjuntos...............................................................................................................
Recuperar el contenido de un archivo adjunto................................................................................................
Recuperar informacin sobre un archivo adjunto............................................................................................
Enviar un mensaje con un archivo adjunto.......................................................................................................
Descargar automticamente archivos adjuntos...............................................................................................
64
64
65
65
65
66
7 Calendario.........................................................................................................................................................
Abrir el calendario............................................................................................................................................
Ver o cambiar una entrada del calendario.......................................................................................................
Abrir una nueva entrada de calendario rellenada............................................................................................
Actualizar informacin de entradas del calendario..........................................................................................
Recuperar informacin de entradas de calendario..........................................................................................
Exportar una entrada de calendario.................................................................................................................
Importar una entrada de calendario.................................................................................................................
Recuperar varias listas de entradas de calendario...........................................................................................
Notificar a una aplicacin del dispositivo BlackBerry cuando cambie una lista de entradas de calendario.....
Notificar a una aplicacin del dispositivo BlackBerry cuando cambie la lista predeterminada de entradas
de calendario....................................................................................................................................................
Actualizar una entrada del calendario sin ninguna notificacin.......................................................................
Eliminar una entrada del calendario sin ninguna notificacin..........................................................................
68
68
68
68
69
71
72
73
73
73
8 Lista de contactos.............................................................................................................................................
Compatibilidad con diversas listas de contactos..............................................................................................
Abrir la aplicacin de contactos........................................................................................................................
Abrir la aplicacin de contactos utilizando los datos de contacto....................................................................
Abrir la aplicacin de contactos con una lista de contactos especfica............................................................
Crear un contacto y asignarlo a una lista de contactos....................................................................................
Recuperar informacin de contacto.................................................................................................................
Recuperar un UID de listas de contactos..........................................................................................................
Exportar un contacto........................................................................................................................................
Importar un contacto........................................................................................................................................
Eliminar un contacto.........................................................................................................................................
Notificar a una aplicacin cuando una lista de contactos cambia....................................................................
Crear y eliminar listas de contactos..................................................................................................................
Crear una lista de contactos......................................................................................................................
Eliminar listas de contactos.......................................................................................................................
Recuperar el contacto asociado con una llamada activa..................................................................................
Recuperar el contacto asociado con una llamada finalizada............................................................................
78
78
78
79
80
81
82
83
84
85
85
86
88
88
89
90
92
74
74
76
92
94
94
95
96
97
98
9 Lista de tareas...................................................................................................................................................
Ver o cambiar una tarea...................................................................................................................................
Crear una tarea nueva en blanco......................................................................................................................
Crear una tarea nueva rellenada......................................................................................................................
Abrir una lista de tareas....................................................................................................................................
Creacin de una tarea.......................................................................................................................................
Agregar informacin de tareas.........................................................................................................................
Cambiar informacin de tareas........................................................................................................................
Guardar una tarea.............................................................................................................................................
Recuperar informacin de tareas.....................................................................................................................
Exportar una tarea............................................................................................................................................
Importar una tarea...........................................................................................................................................
Eliminar una tarea.............................................................................................................................................
Cerrar la lista de tareas.....................................................................................................................................
Notificar a una aplicacin del dispositivo BlackBerry cuando una lista de tareas cambia................................
101
101
101
101
102
102
103
103
104
104
105
105
106
106
107
10 Telfono............................................................................................................................................................
Realizar una llamada desde una aplicacin del dispositivo BlackBerry............................................................
Hacer una llamada desde una aplicacin del dispositivo BlackBerry (entorno de una sola lnea)...................
Realizar una llamada desde una aplicacin del dispositivo BlackBerry (entorno de varias lneas)..................
Agregar tonos DTMF a la cola de envo............................................................................................................
Tonos DTMF de BlackBerry...............................................................................................................................
Escuchar y administrar eventos del telfono....................................................................................................
Escuchar y administrar eventos de varias lneas..............................................................................................
Recuperar informacin de llamadas utilizando registros de llamadas.............................................................
Recuperar a un participante de una llamada....................................................................................................
Recuperar informacin de llamadas.................................................................................................................
Recuperar el nmero de telfono de un dispositivo BlackBerry......................................................................
Recuperar una llamada por el ID de llamada....................................................................................................
Visualizar contenido en una pantalla de llamada.............................................................................................
Mostrar contenido en una pantalla de telfono.......................................................................................
108
108
108
108
109
109
109
110
111
111
112
112
113
113
114
118
118
118
118
118
119
120
121
122
123
12 Opciones de men............................................................................................................................................
Aadir elementos del men a aplicaciones de BlackBerry Device Software....................................................
Crear y registrar un elemento del men...........................................................................................................
Send Menu API.................................................................................................................................................
Retrieving Send commands..............................................................................................................................
Creating a Send menu.......................................................................................................................................
Create a Send menu..................................................................................................................................
Code sample: Creating a Send menu.........................................................................................................
Creating a context object..................................................................................................................................
Using context keys............................................................................................................................................
Using context filters..........................................................................................................................................
Create a context filter................................................................................................................................
125
125
125
126
128
129
129
131
132
133
134
134
Gua de desarrollo
Esta seccin describe cmo invocar una aplicacin de BlackBerry Device Software, como la aplicacin de
contactos, la aplicacin Telfono y la aplicacin Multimedia.
Para obtener ms informacin acerca de cmo integrar su aplicacin con aplicaciones de BlackBerry Device
Software, consulte la descripcin general de las categoras de integracin de aplicaciones en la referencia de API
para BlackBerry Java Development Environment.
2.
net.rim.blackberry.api.invoke.CalendarArguments;
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.MapsArguments;
net.rim.blackberry.api.invoke.MessageArguments;
net.rim.blackberry.api.invoke.PhoneArguments;
Bsqueda unificada
Gua de desarrollo
Bsqueda unificada
El Servicio de bsqueda unificada es un motor de bsqueda que se incluye con BlackBerry Device Software Device
Software 6.0 o posterior. Los usuarios del dispositivo BlackBerry interactan con el Servicio de bsqueda unificada
principalmente desde la caracterstica de bsqueda Universal haciendo clic en el icono de bsqueda de la pantalla
de inicio. Los desarrolladores pueden utilizar el Servicio de bsqueda unificada a travs de la API de bsqueda
unificada. Puede utilizar la API para incluir los datos de su aplicacin en el repositorio de contenido del Servicio y
buscar el ndice de contenido de su aplicacin.
Por ejemplo, imagnese que tiene una gran coleccin de libros y los presta frecuentemente a otras personas.
Quizs sea til crear una aplicacin que le permita catalogarlos y mantener una lista de personas a quienes los
presta. Si esta aplicacin utiliz la API de bsqueda unificada, podra buscar un libro desde la pantalla de inicio o
desde cualquier aplicacin, para encontrar el libro y los datos de contacto de la persona que lo tiene.
Como desarrollador, controla si sus datos aparecen en las bsquedas que los usuarios realizan desde la pantalla de
inicio de un dispositivo BlackBerry, desde otras aplicaciones del dispositivo o slo desde su aplicacin. Adems,
puede buscar los datos de otras aplicaciones cuando estn registrados en el Servicio de bsqueda unificada.
Descripcin
Un objeto EntityBasedSearchable representa sus datos que se pueden
buscar para el servicio de bsqueda unificada. Cuando registra su
EntityBasedSearchable, el servicio solicita que su aplicacin prepare
los datos para su envo llamando a EntityBasedSearchable.load().
Cuando sus datos de aplicaciones estn listos para su envo, debe invocar
completed() en el parmetro NotificationListener pasado a
load().
Gua de desarrollo
Tarea
Encapsule sus datos en un objeto
SearchableEntity.
Descripcin
Un objeto SearchableEntity es la unidad ms pequea de datos que
una aplicacin puede enviar al servicio de bsqueda unificada. Su objeto
EntityBasedSearchable enva sus objetos SearchableEntity al
servicio cuando se le pregunta. Debe encapsular sus datos de aplicaciones
en un objeto SearchableEntity. El Servicio indexa los metadatos
expuestos por estos objetos para que sean considerados durante las
operaciones de bsqueda. Adems, los objetos SearchableEntity se
devuelven en resultados de bsqueda del servicio.
El Servicio de bsqueda unificada puede necesitar interrumpir su operacin
de carga si el dispositivo BlackBerry est ocupado o tiene un nivel bajo de
batera. Si es necesaria una interrupcin, el servicio invoca
EntityBasedSearchable.pause(). Cuando el servicio detecta que su
operacin puede continuar, invoca
EntityBasedSearchable.resume(). Responda a estos eventos de
manera oportuna para que su aplicacin no provoque la interrupcin de
otras aplicaciones del dispositivo.
Registre su objeto
EntityBasedSearchable con el
El siguiente diagrama ilustra la relacin entre los componentes utilizados en las tareas anteriores.
Gua de desarrollo
bsqueda que se instalaron en un dispositivo BlackBerry. De este modo, una aplicacin puede encontrar y utilizar
su ExternalSearchProvider especficamente, o permitir que el usuario elija uno de la lista.
Para garantizar que su aplicacin aparezca en la lista de proveedores externos de bsqueda, debe registrar
ExternalSearchProvider con el Servicio de bsqueda unificada. Pase su objeto ExternalSearchProvider
cuando invoque SearchRegistry.register().
El diagrama siguiente muestra la relacin entre algunos de los componentes necesarios para implementar
ExternalSearchProvider.
Gua de desarrollo
2.
Cree las variables de instancia para almacenar informacin que sea pertinente a su EntityBasedSearchable.
private
private
private
private
private
private
3.
En el constructor, cree una matriz de objetos SearchField. Cada SearchField almacena el nombre de una
propiedad de sus datos que se puede buscar. En el siguiente ejemplo de cdigo, los objetos de datos de aplicacin
administrados por esta clase tienen tres propiedades que se pueden buscar. Por ejemplo, si los datos de su
aplicacin modelaron libros, estos campos pueden incluir el ttulo, el editor y el nmero de pginas.
class MyEBS implements EntityBasedSearchable
{
_searchFields = new SearchField[3];
4.
10
Gua de desarrollo
5.
6.
Cree un icono que aparecer en los resultados de bsqueda que incluyan las entidades que se pueden buscar
administradas por EntityBasedSearchable. Para obtener ms informacin acerca de crear iconos, consulte
"Personalizacin de la apariencia de sus datos en los resultados de la bsqueda ".
Implemente getType(). Devuelva el tipo de contenido que encaje mejor con los datos de su aplicacin. Para
ver una lista de tipos de contenido vlidos, consulte la interfaz
net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants en la
referencia de la API.
public long getType() {
return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
7.
Elija los iniciadores de bsqueda que deben recibir resultados de bsqueda desde su aplicacin. Para obtener
ms informacin acerca de la exposicin de sus datos a las bsquedas, consulte la clase
net.rim.device.api.unifiedsearch.entity.ExposureLevel en la referencia de la API.
public int getPrivacyLevel() {
return ExposureLevel.LEVEL_PUBLIC;
}
8.
Implemente load(). Si el dispositivo BlackBerry est ocupado o el nivel de batera es bajo, puede que tenga
que detener la operacin de este mtodo y reanudarlo cuando le sea solicitado.
a. Para EntityBasedSearchable, determine cuntos objetos de datos existen actualmente en su
aplicacin.
public void load (NotificationListener observer, int loadType) {
Vector myObjects = MyObjectManager.getDataObjects();
if (myObjects != null) {
int size = myObjects.size()
if(size < 1) {
_myEntities = new MySearchableEntity[0];
} else {
_myEntities = new MySearchableEntity[size];
}
} else {
// handle the condition where you have no data objects
}
b.
Utilice un bucle while para rellenar una matriz de entidades que se pueden buscar.
Enumeration objects = myObjects.elements();
int count = 0;
while (objects.hasMoreElements()) {
c.
Gua de desarrollo
observer.partiallyCompleted(this, null,
NotificationListener.TYPE_SEARCHABLE);
_monitor.wait();
}
} catch (InterruptedException e){
observer.error(e);
return;
}
}
d.
Cuando su aplicacin recupere el control del subproceso, contine rellenando su matriz de entidades que
se pueden buscar.
e.
Notifique al Servicio de bsqueda unificada cuando haya terminado de cargar sus datos.
}
9.
observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
10. En resume(), cambie el valor de la variable _wait a false. Tambin, notifique al mtodo load() que puede
reanudar la ejecucin. El servicio de bsqueda unificada invoca resume() cuando desea que su aplicacin
reanude los datos que carga.
public void resume() {
_wait = false;
synchronized(_monitor) {
_monitor.notifyAll();
}
}
Gua de desarrollo
Tambin puede especificar un icono para diferentes categoras de entidades que se pueden buscar. Por ejemplo,
si crea una aplicacin para catalogar libros, quiz quiera tener iconos diferentes para categoras diferentes de
libros, como superventas, libros grandes y primeras ediciones. Estas categoras son de toda clase de libros, as que
se incluiran lgicamente en un objeto EntityBasedSearchable que administr los libros. Sin embargo, una
aplicacin que los muestre quiz quiera dar una indicacin visual para ayudar al usuario a determinar rpidamente
si puede encontrar un libro en un estante regular, un estante grande o en una sala con control ambiental. En este
caso, podra crear tres clases SearchableEntity para ajustar tres clases diferentes de objetos de libro, cada una
con su propia implementacin de getIcon(). Las tres clases seguiran estando administradas por un solo
EntityBasedSearchable.
2.
3.
4.
5.
13
Gua de desarrollo
2.
net.rim.device.api.unifiedsearch.SearchField;
net.rim.device.api.unifiedsearch.SearchFieldCriteria;
net.rim.device.api.unifiedsearch.SearchFieldCriteriaList;
net.rim.device.api.unifiedsearch.entity.SearchableEntity;
net.rim.device.api.unifiedsearch.searchables.Searchable;
3.
Cree un objeto SearchFieldCriteria para cada una de sus propiedades que se pueden buscar. En el ejemplo
de cdigo siguiente, el objeto de datos de aplicaciones myObject tiene un mtodo getProperty() que
devuelve una cadena para un ndice dado. Por ejemplo, si myObject describi un libro, los ndices 0, 1 y 2 de
getProperty() podran devolver el nombre, el editor y el nmero de pginas del libro.
int size = searchfields.length
SearchFieldCriteria[] criteria = new SearchFieldCriteria[size];
for (int i = size -1; i >= 0; --i) {
criteria[i] = new SearchFieldCriteria(searchfields[i], new String[]
{myObject.getProperty(i)});
}
4.
Cree y rellene un objeto SearchFieldCriteriaList para mantener sus criterios de campo de bsqueda.
SearchFieldCriteriaList _sfcl = new SearchFieldCriteriaList();
for (int i = size -1; i >= 0; --i) {
sfcl.addCriteria(criteria[i]);
}
5.
6.
En getData(), devuelva su objeto de datos de aplicaciones. Continuando con el ejemplo del libro, este mtodo
devolvera un objeto que representa al libro.
public Object getData() {
return myObject;
}
7.
14
En getTitle(), asigne un ttulo a esta entidad que se puede buscar. El texto del ttulo aparece en los resultados
de la bsqueda. Para continuar con el ejemplo del libro, myObject.getName() podra devolver el nombre de
un libro.
Gua de desarrollo
8.
En getSummary() proporcione un resumen de los datos en esta entidad que se puede buscar. El texto del
resumen aparece en los resultados de la bsqueda. Continuando con el ejemplo del libro,
myObject.getDescription() podra devolver una descripcin del libro.
public String getSummary() {
return myObject.getDescription();
}
9.
10. Defina qu opciones deben aparecer en el men contextual cuando un usuario del dispositivo BlackBerry haga
clic en su entidad desde una lista de resultados de la bsqueda. Para obtener ms informacin, consulte
"Especifique lo que pueden hacer los usuarios con sus datos en los resultados de la bsqueda".
11. Si desea que SearchableEntity muestre un icono diferente al de su icono de aplicacin, proporcione el icono
en getIcon(). Para obtener ms informacin, consulte "Personalizacin de la apariencia de sus datos en los
resultados de la bsqueda".
15
Gua de desarrollo
2.
3.
In the runAction() method, retrieve the SearchableEntity object that the user selected from a search
result.
protected void runAction()
{
BookEntity book = (BookEntity) this.getSearchableEntity();
4.
In runAction(), Create an instance of the DisplayBookScreen class to display the book information. Provide
the SearchableEntity object that you retrieved to the new screen object.
DisplayBookScreen showBook = new DisplayBookScreen(book);
5.
6.
UiApplication.getUiApplication().pushScreen(showBook);
Implement the toString() method to provide a description of the operation this class performs.
public String toString() {
return "Show book info";
}
7.
Implement the getIcon() method to associate an icon with this operation. In this task, no icon is provided.
16
Gua de desarrollo
8.
In the getUiActions() method of your SearchableEntity class, populate the uiActions parameter with
your actions like DisplayBookInfo. Change the uiActions array reference using the Arrays object. If you
try to change the array without the Arrays object, you will create a local copy of the array. Your local copy is
not passed back to the application that requested your UiAction objects.
In the following code sample, the ActionTwo and ActionThree classes were added to provide a more complete
example.
public UiAction getUiActions(Object contextObject, UiAction[] uiActions) {
ActionOne act1 = new ActionOne(this);
Arrays.add(uiActions, act1);
Arrays.add(uiActions, new ActionTwo());
Arrays.add(uiActions, new ActionThree());
9.
Return the UiAction object you want to highlight the menu of actions by default.
return act1;
2.
3.
In the main() method, indentify whether a user launched the application from the Home screen of a BlackBerry
device, or through a search result. This step assumes that you configured an alternate entry point for your project
named uiAction.
if( args != null && args.length > 0 && args[0].equals("uiAction"))
{
4.
Gua de desarrollo
5.
6.
In your application constructor, indentify the entry point used to launch the application.
if(entryPoint.equals("normal")
{
7.
If the your appilcation was launched from the Home screen, display your first screen.
{
8.
pushScreen(new MyAppScreen());
If a user launched your application from a search result, do nothing. The application that provided the search
result prompts your application to execute the UiAction automatically.
} else
{
}
2.
3.
Invoke the setEntryPointIndex() method and specify a single parameter with a value of 1. This configures
the UiAction object to use an alternate entry point for your application.
displayAction.setEntryPointIndex(1);
4.
18
Gua de desarrollo
5.
Despus de terminar: You must provide an alternate entry point for your application. For more information, see
Provide an alternate entry point for your application.
2.
Cree su EntityBasedSearchable.
public class MyClass {
private MySearchable _searchable;
private RegistryToken _regToken;
public MyClass() {
_searchable = new MySearchable()
3.
4.
if (! _regToken.isValid()) {
// Action to take if the registration is not valid.
}
Nota: El identificador del registro es nico para su EntityBasedSearchable hasta que el dispositivo BlackBerry
se reinicie. Debe almacenar su identificador de registro y volver a utilizarlo cuando actualice el contenido
mediante la clase AppContentManager.
19
Gua de desarrollo
Notificar al Servicio de bsqueda unificada acerca de los cambios hechos a sus datos
2.
Para actualizar un objeto SearchableEntity que el Servicio de bsqueda unificada ya ha indexado, invoque
updateContent().
3.
4.
Gua de desarrollo
Descripcin
Este enfoque elimina su objeto EntityBasedSearchable y todos los
datos asociados con l del ndice de contenido del Servicio de bsqueda
unificada. Su EntityBasedSearchable ya no aparece en la lista de
fuentes de datos que se pueden buscar registradas en el dispositivo
BlackBerry.
Para eliminar el registro de EntityBasedSearchable, invoque
SearchRegistry.deregister() y pase el identificador de registro
devuelto cuando se registr EntityBasedSearchable.
Este enfoque elimina todos los datos de su aplicacin del repositorio. Puede
utilizar este enfoque cuando deba eliminar todos los datos y sin embargo
planea continuar rellenando el repositorio con datos nuevos en un futuro
prximo.
Para eliminar todos los datos del repositorio de contenido para
EntityBasedSearchable, invoque
UnifiedSearchServices.removeAllData() y pase el identificador de
registro que se devolvi cuando se registr EntityBasedSearchable.
21
Gua de desarrollo
conexin de red o una conexin de comunicacin entre procesos, invocando una bsqueda en el servidor remoto,
recuperando los resultados y mostrndoselos al usuario. Si su aplicacin utiliza un motor de bsqueda remoto,
puede considerar insertar los resultados de la bsqueda en el repositorio de contenido del Servicio de bsqueda
unificada para mejorar la velocidad y la eficiencia de bsquedas posteriores.
Algunos proveedores de bsqueda externos predefinidos son YouTube y Google. Las aplicaciones de terceros
tambin pueden acceder a proveedores de bsqueda externos. El mtodo
UnifiedSearchServices.getSearchProviders() devuelve una lista de objetos registrados
ExternalSearchProvider donde una aplicacin puede enviar una bsqueda.
De forma similar a los objetos EntityBasedSearchable, un ExternalSearchProvider debe registrarse con
el Servicio de bsqueda unificada utilizando el objeto SearchRegistry. Para obtener ms informacin, consulte
"Registrar su objeto EntityBasedSearchable en el Servicio de bsqueda unificada".
Ejemplo de cdigo: Implementar la interfaz ExternalSearchProvider
import net.rim.device.api.ui.image.Image;
import net.rim.device.api.ui.image.ImageFactory;
import net.rim.device.api.unifiedsearch.searchables.ExternalSearchProvider;
import net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants;
public class MySearchProvider implements ExternalSearchProvider {
// A unique registration ID for this provider.
private long _regId;
// The external search provider icon.
private Image _icon;
// Constructor
public MySearchProvider() {
// Read the icon from the resource bundle
Bitmap img = Bitmap.getBitmapResource("myicon.png");
if(img != null) {
_icon = ImageFactory.createImage(img);
} else {
_icon = null;
}
}
// The provider name to be displayed.
public String getProviderName() {
return "Sample External Search Provider";
}
// The provider icon to be displayed.
public Image getProviderIcon() {
22
Gua de desarrollo
return _icon;
}
// The content type this provider offers.
public long getContentType() {
return SearchableContentTypeConstants.CONTENT_TYPE_MEDIA_MEMO;
}
// The search initiator will pass control to your application using this method.
public void search(String keywords) {
// Create network or IPC connections, send search keywords, and display the
results.
}
// Allows the Unified Search Service and your application to keep track of
// this searchable's registration
public long getRegistrationID()
{
return _regId;
}
public setRegistrationID(long id)
{
_regId = id;
}
}
2.
net.rim.device.api.system.ApplicationDescriptor;
net.rim.device.api.system.ApplicationManager;
net.rim.device.api.system.ApplicationManagerException;
net.rim.device.api.system.CodeModuleManager;
3.
Recupere una matriz de objetos que representan las aplicaciones que se estn ejecutando en el dispositivo.
ApplicationDescriptor[] allApps =
ApplicationManager.getApplicationManager().getVisibleApplications();
4.
Examine cada elemento de la matriz para determinar si su aplicacin se est ejecutando en el dispositivo.
for(int i = allApps.length -1; i >= 0; --i) {
if(allApps[i].getModuleHandle() == modHandle) {
23
Gua de desarrollo
5.
Si es as, envele las palabras clave de la bsqueda. Invoque postGlobalEvent() para enviar un mensaje a su
aplicacin que debe mostrar una pantalla con los resultados para las palabras clave nuevas. Debe detectar un
evento global publicado en su GUID, en el constructor de su aplicacin.
int procID =
ApplicationManager.getApplicationManager().getProcessId(allApps[i]);
ApplicationManager.getApplicationManager().postGlobalEvent(procID,
your application's GUID, 0, 0, keywords, null);
}
}
6.
7.
Inicie su aplicacin. Pase las palabras clave de la bsqueda como un argumento. En el constructor de su
aplicacin, debe detectar si hay un argumento que contiene palabras clave de bsqueda.
try {
ApplicationManager.getApplicationManager().runApplication(new
ApplicationDescriptor(myAppDes[0], new String[]{keywords}));
}
catch(ApplicationManagerException e)
{
// Process the error condition
}
}
}
8.
9.
10. Registre su aplicacin para rastrear eventos globales, como el que cre en el paso 5 y muestre su primera pantalla.
public class MySearchProviderApp extends UiApplication implements
GlobalEventListener {
public MySearchProviderApp(String searchKeywords) {
addGlobalEventListener(this);
pushScreen(new MySearchScreen(searchKeywords));
}
12. Si su aplicacin se est ejecutando en el dispositivo, cierre la pantalla existente y muestre otra pantalla.
24
Gua de desarrollo
if(guid == G53DDE84S97JHVEK390) {
if(object0 instanceof String) {
popScreen();
pushScreeen(new MySearchScreen((String) object0));
requestForeground();
}
}
13. Pruebe las palabras clave de bsqueda en los argumentos para el mtodo main. Inicie su aplicacin con las
palabras clave dadas o con una cadena vaca si no las hay.
Bsquedas
Puede utilizar la clase UnifiedSearchServices para configurar e iniciar una operacin de bsqueda desde su
aplicacin. En el caso ms sencillo, puede buscar todas las fuentes de datos cuando enva una palabra clave al
Servicio de bsqueda unificada. Sin embargo, puede limitar su bsqueda a fuentes de datos especficos que se
pueden buscar y a campos de bsqueda dentro de esas fuentes.
Una vez completada la bsqueda, el Servicio de bsqueda unificada devuelve un objeto SearchResponse que
contiene las entidades que se pueden buscar que coinciden con sus criterios de bsqueda. El Servicio devuelve los
datos organizados por fuente que se puede buscar y por campo de bsqueda. La estructura del resultado le
permite ver los metadatos relacionados con el resultado. De este modo, puede tomar decisiones ms detalladas
acerca de la relevancia de los resultados de la bsqueda para sus usuarios.
25
Bsquedas
Gua de desarrollo
2.
Cree una variable de instancia para almacenar una referencia al objeto UnifiedSearchServices.
public class MySearchScreen() {
UnifiedSearchServices _uss = UnifiedSearchServices.getInstance();
3.
Recupere una referencia a su objeto EntityBasedSearchable y asgnelo a una variable de instancia. Cuando
recupere una lista de aplicaciones que se pueden buscar en el dispositivo, cambie el valor
SearchableContentTypeConstants por uno que sea apropiado para su bsqueda. Asegrese de realizar
alguna accin si EntityBasedSearchable no se encuentra en el vector deviceSearchables.
MySearchable _searchable = null;
Vector deviceSearchables =
_uss.getDeviceSearchables(SearchableContentTypeConstants.CONTENT_TYPE_MEMO);
for(int i = deviceSearchables.size() -1; i >=0; --i) {
if(deviceSearchables.elementAt(i).getName().equals("name of your searchable"))
{
_searchable = (MySearchable) deviceSearchables.elementAt(i);
}
}
// Do something if _searchable is still null
4.
Cree un mtodo para iniciar la bsqueda. Acepte la palabra clave de la bsqueda como un parmetro en el que
su aplicacin especifica las palabras clave de la bsqueda que proporciona el usuario del dispositivo
BlackBerry. Este mtodo invoca un subproceso nuevo, as que declare el parmetro String como final.
private void doSearch(final String keyword) {
5.
6.
Inicie la bsqueda y recupere los resultados, si los hay. Si hay algn resultado, envelo a otro mtodo para ser
analizado.
SearchResponse results = null;
results = _uss.search(keyword, _searchable);
if(results != null) {
parseResponse(results);
}
26
Bsquedas
Gua de desarrollo
7.
8.
Despus de terminar: Implemente parseResponse. Para obtener ms informacin, consulte "Procesar los
resultados de la bsqueda".
2.
net.rim.device.api.unifiedsearch.entity.*;
net.rim.device.api.util.Arrays;
net.rim.device.api.system.Application;
java.util.*;
Cree una variable de la instancia para almacenar las entidades que se pueden buscar, para mostrrselas al usuario
del dispositivo BlackBerry.
MySearchableEntity[] _myEntities;
3.
4.
Configure este mtodo para que se ejecute cuando su aplicacin recupere el control sobre el subproceso de
eventos.
Application.getApplication().invokeLater(new Runnable() {
public void run() {
5.
De los resultados de la bsqueda, recupere un objeto Hashtable que contenga campos de bsqueda y
entidades que se pueden buscar para EntityBasedSearchable.
final Hashtable results = searchResult.getSearchResult(_searchable);
6.
Recupere un objeto Enumeration que contenga los valores en Hashtable y declare una matriz para almacenar
los valores nicos desde la enumeracin.
27
Bsquedas
Gua de desarrollo
7.
8.
});
while(values.hasMoreElements()) {
searchableEntities = (Object[]) values.nextElement();
for(int i = searchableEntities - 1; i >= 0; --i) {
if(!Arrays.contains(_myEntities, searchableEntities[i]) {
Arrays.add(_myEntities, searchableEntities[i]);
}
}
}
La matriz _myEntities contiene un conjunto de objetos nicos MySearchableEntity que puede utilizar para
mostrar los resultados de la bsqueda al usuario.
28
Gua de desarrollo
Detectar el soporte
Puede detectar cundo un dispositivoBlackBerry se conecta a un soporte (como un soporte de manos libres)
utilizando el tipo de capacidad DeviceCapability.TYPE_CRADLE que forma parte de la API de capacidad del
dispositivo.
Puede utilizar DeviceCapability.isSupported() y DeviceCapability.isAvailable() para detectar el
estado del soporte. Los dispositivos que ejecutan BlackBerry Device Software6.0 devuelven true para
isSupported(DeviceCapability.TYPE_CRADLE). Cuando un dispositivo que ejecuta BlackBerry Device
Software 6.0 se conecta a un soporte, isAvailable(DeviceCapability.TYPE_CRADLE) devuelve true.
Cuando detecta una conexin de soporte, puede utilizar la clase CradleProtocol para detectar el tipo y las
propiedades del soporte. CradleProtocol se proporciona en el paquete net.rim.device.api.accessory.
La clase proporciona campos para el tipo de soporte (como un soporte de manos libres, una funda o una estacin
de carga) y sus propiedades (como si un soporte tiene luz o botones que pueden cambiarse mediante
programacin).
CradleProtocol.getCradleType() devuelve el tipo de soporte que el mismo soporte ofrece. Es posible que
un soporte no proporcione su tipo exacto. Por ejemplo, un soporte de manos libres puede devolver
Gua de desarrollo
Detectar el soporte
import net.rim.device.api.accessory.CradleProtocol;
import net.rim.device.api.system.capability.DeviceCapability;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
class CradleDemoScreen extends MainScreen
{
public CradleDemoScreen()
{
setTitle("Cradle Demo");
RichTextField statusField = new RichTextField();
add(statusField);
boolean isConnected =
DeviceCapability.isAvailable(DeviceCapability.TYPE_CRADLE);
if (isConnected)
{
CradleProtocol myCradle = CradleProtocol.getInstance();
int cradleType = myCradle.getCradleType();
switch (cradleType)
{
case CradleProtocol.TYPE_CAR_KIT:
statusField.setText("Device is connected to a car kit cradle.");
break;
case CradleProtocol.TYPE_AUDIO:
statusField.setText("Device is connected to an audio cradle.");
break;
case CradleProtocol.TYPE_BEDSIDE:
statusField.setText("Device is connected to a charging pod
cradle.");
break;
case CradleProtocol.TYPE_CHARGER:
statusField.setText("Device is connected to a charger cradle.");
break;
case CradleProtocol.TYPE_DESKTOP:
statusField.setText("Device is connected to a desktop cradle.");
break;
case CradleProtocol.TYPE_HOLSTER:
statusField.setText("Device is connected to a holster cradle.");
break;
case CradleProtocol.TYPE_MULTIMEDIA:
statusField.setText("Device is connected to a multimedia
cradle.");
break;
case CradleProtocol.TYPE_SIMPLE:
statusField.setText("Device is connected to a simple cradle.");
break;
default:
statusField.setText("Can't determine type of cradle.");
}
}
else
{
statusField.setText("Device is not connected.");
}
}
}
30
Gua de desarrollo
Gestionar soportes
Gestionar soportes
Puede registrar su aplicacin como gestor de soportes. Un gestor de soportes es una aplicacin que puede iniciar
cuando un dispositivo BlackBerry se conecta a un soporte especfico. Por ejemplo, si su aplicacin ofrece
informacin sobre viajes locales quiz le convendra registrarlo como gestor para soportes de manos libres, para
que pueda iniciarse automticamente cuando el dispositivo se conecte a un soporte de ese tipo.
Para registrar su aplicacin como un controlador de soporte, use
quiere gestionar y su descriptor de aplicacin. Los tipos de soporte se definen como campos en la clase
CradleProtocol que se ofrece en el paquete net.rim.device.api.accessory.
El registro como gestor de soportes es persistente. Slo necesita registrar su aplicacin una vez despus de que se
haya instalado en el dispositivo.
Si hay algn gestor registrado para algn tipo de soporte, al usuario le aparecer un cuadro de dilogo cuando el
dispositivo se conecte a ese tipo de soporte.
El usuario puede seleccionar qu gestor desea utilizar, si es que quiere utilizar alguno, y se inicia la aplicacin
gestora seleccionada. El usuario tambin puede indicar que la aplicacin gestora seleccionada debe iniciarse
automticamente la prxima vez que se conecte el soporte del tipo especificado.
31
Gua de desarrollo
El usuario puede cambiar la configuracin del gestor de soportes del dispositivo haciendo clic en Opciones>
Aplicaciones de terceros en la pantalla de inicio.
Ejemplo de cdigo: Registrar a un gestor de soportes
El siguiente ejemplo de cdigo registra la aplicacin actual como gestor de soportes de manos libres.
CradleHandlerRegistry.registerHandler(
CradleProtocol.TYPE_CAR_KIT,
ApplicationDescriptor.currentApplicationDescriptor());
2.
Invoque Sensor.isSupported() y especifique el tipo de sensor que quiere buscar. Los tipos de sensor se
definen como constantes en la clase Sensor. El siguiente ejemplo de cdigo comprueba si el dispositivo tiene
control deslizante.
boolean hasSliderSensor;
hasSliderSensor = Sensor.isSupported(Sensor.SLIDE);
El mtodo devuelve true si el dispositivo contiene el sensor especificado, y devuelve false en caso contrario.
Ejemplo de cdigo: Buscar un sensor en el dispositivo
El siguiente ejemplo de cdigo comprueba si el dispositivo tiene sensor de funda, sensor de control deslizante o
sensor de tapa.
class SensorDemoScreen extends MainScreen
{
private RichTextField statusField;
public SensorDemoScreen()
{
setTitle("Sensor Demo");
32
Gua de desarrollo
2.
Invoque Sensor.getState() y especifique el tipo de sensor que quiere comprobar. Los tipos de sensor se
definen como constantes en la clase Sensor. El siguiente ejemplo de cdigo comprueba el estado del control
deslizante de un dispositivo BlackBerry.
int sliderState = Sensor.getState(Sensor.SLIDE);
El mtodo devuelve el estado del sensor como una constante int. Las constantes que se pueden devolver se
definen en la clase Sensor. Puede utilizar los mtodos siguientes para determinar si el sensor est en un estado
determinado: Sensor.isSlideClosed(), Sensor.isSlideOpen(), Sensor.isSlideInTransition().
Ejemplo de cdigo: Mostrar el estado del control deslizante del dispositivo
class SensorDemoScreen extends MainScreen implements SensorListener
{
private RichTextField statusField;
public SensorDemoScreen()
{
setTitle("Sensor Demo");
statusField = new RichTextField();
add(statusField);
if (Sensor.isSupported(Sensor.SLIDE))
{
int sliderState = Sensor.getState(Sensor.SLIDE);
switch (sliderState)
{
case Sensor.STATE_SLIDE_CLOSED:
// do something if slider is closed
statusField.setText("Slider is closed.");
break;
case Sensor.STATE_SLIDE_IN_TRANSITION:
// do something if slider in transition
statusField.setText("Slider is between open and closed.");
break;
case Sensor.STATE_SLIDE_OPEN:
// do something if slider is open
statusField.setText("Slider is open.");
33
Gua de desarrollo
break;
default:
statusField.setText("Can't determine state of slider.");
2.
3.
4.
34
Gua de desarrollo
5.
Para escuchar los cambios en varios sensores, actualice el tercer argumento de addListener() para agregar
marcas adicionales de estado de sensor. El siguiente ejemplo de cdigo rastrea los cambios hechos al sensor de
la tapa o al del control deslizante.
Sensor.addListener(Application.getApplication(), this, Sensor.FLIP |
Sensor.SLIDE);
Ejemplo de cdigo: Rastrear los cambios del estado del control deslizante del dispositivo
class SensorDemoScreen extends MainScreen implements SensorListener
{
private RichTextField statusField;
public SensorDemoScreen()
{
setTitle("Sensor Demo");
statusField = new RichTextField();
add(statusField);
Sensor.addListener(Application.getApplication(), this, Sensor.SLIDE);
}
public void onSensorUpdate(int sensorID, int update)
{
if (sensorID == Sensor.SLIDE)
{
if (update == Sensor.STATE_SLIDE_OPEN)
{
// do something if slider is now open
statusField.setText("Slider is now open.");
}
else if (update == Sensor.STATE_SLIDE_IN_TRANSITION)
{
// do something if slider is now in transition
statusField2.setText("Slider state is now in transition.");
}
else if (update == Sensor.STATE_SLIDE_CLOSED)
{
// do something if slider is now closed
statusField.setText("Slider is now closed.");
}
}
}
}
Gua de desarrollo
pushScreen(screen);
}
public static void main(String[] args)
{
SensorDemo app = new SensorDemo();
app.enterEventDispatcher();
}
class SensorDemoScreen extends MainScreen implements SensorListener
{
private RichTextField statusField1;
private RichTextField statusField2;
public SensorDemoScreen()
{
setTitle("Sensor Demo");
statusField1 = new RichTextField();
statusField2 = new RichTextField();
add(statusField1);
add(statusField2);
// Check for the presence of a sensor
boolean hasFlipSensor, hasHolsterSensor, hasSliderSensor;
hasFlipSensor = Sensor.isSupported(Sensor.FLIP);
hasHolsterSensor = Sensor.isSupported(Sensor.HOLSTER);
hasSliderSensor = Sensor.isSupported(Sensor.SLIDE);
statusField1.setText("Flip: " + hasFlipSensor + "\nHolster: "
+ hasHolsterSensor + "\nSlider: " + hasSliderSensor + "\n");
// Check for the state of a sensor
if (Sensor.isSupported(Sensor.SLIDE))
{
int sliderState = Sensor.getState(Sensor.SLIDE);
switch (sliderState)
{
case Sensor.STATE_SLIDE_CLOSED:
// do something if slider is closed
statusField2.setText("Slider is closed.");
break;
case Sensor.STATE_SLIDE_IN_TRANSITION:
// do something if slider in transition
statusField2.setText("Slider is between open and closed.");
break;
case Sensor.STATE_SLIDE_OPEN:
// do something if slider is open
statusField2.setText("Slider is open.");
break;
default:
statusField2.setText("Can't determine state of slider.");
}
}
// Listen for changes to a sensor
Sensor.addListener(Application.getApplication(), this,
Sensor.SLIDE);
}
// implementation of SensorListener.onSensorUpdate()
// only checks for slider changes
public void onSensorUpdate(int sensorID, int update)
{
if (sensorID == Sensor.SLIDE)
36
Gua de desarrollo
if (update == Sensor.STATE_SLIDE_OPEN)
{
// do something if slider is now open
statusField2.setText("Slider is now open.");
}
else if (update == Sensor.STATE_SLIDE_IN_TRANSITION)
{
// do something if slider is now transitioning
statusField2.setText("Slider state is changing.");
}
else if (update == Sensor.STATE_SLIDE_CLOSED)
{
// do something if slider is now closed
statusField2.setText("Slider is now closed.");
}
37
Lista de mensajes
Gua de desarrollo
Lista de mensajes
Esta seccin describe cmo utilizar las capacidades de mensajera del dispositivo BlackBerry.
Para obtener ms informacin, consulte la descripcin general de las categoras de mensajera en la referencia de
la API para BlackBerry Java Development Environment.
2.
2.
javax.microedition.io.Connector;
javax.wireless.messaging.MessageConnection;
javax.wireless.messaging.TextMessage;
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.MessageArguments;
3.
38
Gua de desarrollo
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.blackberry.api.invoke.MessageArguments;
2.
2.
2.
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.MessageArguments;
net.rim.blackberry.api.mail.Address;
net.rim.blackberry.api.mail.Message;
3.
39
Gua de desarrollo
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.blackberry.api.invoke.MessageArguments;
2.
2.
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.MessageArguments;
net.rim.blackberry.api.mail.Address;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.PINAddress;
3.
2.
3.
40
Busque una ControlledAccessException si su aplicacin accede a un objeto al que no tiene permiso para
acceder.
Gua de desarrollo
2.
3.
4.
Despus del bloque try-catch, invoque store.addStoreListener() para aadir una instancia
store.addStoreListener(this);
2.
41
Gua de desarrollo
2.
3.
Recupere el objeto Folder para el que desea recibir notificaciones de nuevos mensajes.
Folder[] folders = store.list(Folder.INBOX);
Folder inbox = folders[0];
4.
2.
Invoque Store.getUnreadMessageCount().
int numUnread = store.getUnreadMessageCount();
Abrir un mensaje
1.
2.
42
java.util.Date;
net.rim.blackberry.api.mail.Address;
net.rim.blackberry.api.mail.Folder;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Store;
Gua de desarrollo
3.
4.
Invoque folder.getMessages() para recuperar los objetos de mensaje y almacenarlos en una matriz
Message. Itere sobre la matriz y recupere informacin, como el remitente y el asunto, para mostrarla al usuario
del dispositivo BlackBerry.
Message[] msgs = folder.getMessages();
5.
Cuando un usuario selecciona un mensaje de la lista, invoque mtodos en el objeto Message para recuperar el
contenido pertinente de campos y cuerpo que mostrar al usuario.
Message msg = msgs[0]; // Retrieve the first message
Address[] recipients = msg.getRecipients(Message.RecipientType.TO);
Date sent = msg.getSentDate();
Address from = msg.getFrom();
String subject = msg.getSubject();
Object o = msg.getContent();
// Verify that the message is not multipart
if ( o instanceof String )
{
String body = (String)o;
}
//...
6.
Invoque Message.getBodyText() en un mensaje para recuperar el contenido de texto sin formato como una
String. Si el mensaje no contiene texto sin formato, el mtodo devuelve null.
43
Gua de desarrollo
2.
net.rim.blackberry.api.mail.MimeBodyPart;
net.rim.blackberry.api.mail.Multipart;
net.rim.blackberry.api.mail.SupportedAttachmentPart;
net.rim.blackberry.api.mail.TextBodyPart;
net.rim.blackberry.api.mail.UnsupportedAttachmentPart;
3.
Cree las variables locales que indican si BlackBerry Attachment Service es compatible con el tipo de archivo
adjunto del mensaje.
boolean _hasSupportedAttachment;
boolean _hasUnsupportedAttachment;
4.
5.
Si el parmetro del mtodo es un objeto Multipart, el objeto tiene varios objetos BodyPart. En cada objeto
BodyPart, invoque el mtodo recursivo que busca en el cuerpo de un mensaje de correo electrnico.
if(obj instanceof Multipart)
{
_Multipart mp = (Multipart)obj;
//Extract all of the parts within the Multipart message.
for(int count=0; count < mp.getCount(); ++count)
{
findEmailBody(mp.getBodyPart(count));
}
}
6.
Si el objeto BodyPart es un TextBodyPart, recupere el cuerpo de texto sin formato del mensaje.
else if (obj instanceof TextBodyPart)
{
//This message only has a text body.
TextBodyPart tbp = (TextBodyPart) obj;
readEmailBody(tbp);
}
7.
44
Gua de desarrollo
8.
b.
Si el objeto MimeBodyPart no contiene archivos adjuntos, recupere el cuerpo del mensaje utilizando el
objeto MimeBodyPart como un parmetro.
if (mbp.getContentType().indexOf(ContentType.TYPE_TEXT_HTML_STRING) != -1)
{
readEmailBody(mbp);
}
c.
Si el objeto MimeBodyPart contiene archivos adjuntos, invoque un mtodo que recupere el cuerpo del
mensaje.
else if
(mbp.getContentType().equals(ContentType.TYPE_MULTIPART_MIXED_STRING) ||
mbp.getContentType().equals(ContentType.TYPE_MULTIPART_ALTERNATIVE_STRING))
{
findEmailBody(mbp.getContent());
}
9.
Si el BodyPart es un archivo adjunto compatible con BlackBerry Attachment Service, cambie la variable local
pertinente a true.
else if (obj instanceof SupportedAttachmentPart)
{
_hasSupportedAttachment = true;
}
10. Si el BodyPart es un archivo adjunto no compatible con BlackBerry Attachment Service, cambie la variable local
pertinente a true.
else if (obj instanceof UnsupportedAttachmentPart)
{
_hasUnsupportedAttachment = true;
}
45
Gua de desarrollo
}
else if (obj instanceof TextBodyPart)
{
TextBodyPart tbp = (TextBodyPart) obj;
readEmailBody(tbp);
}
else if (obj instanceof MimeBodyPart)
{
MimeBodyPart mbp = (MimeBodyPart)obj;
if (mbp.getContentType().indexOf(ContentType.TYPE_TEXT_HTML_STRING) != -1)
{
readEmailBody(mbp);
}
}
else if (mbp.getContentType().equals(ContentType.TYPE_MULTIPART_MIXED_STRING) ||
mbp.getContentType().equals(ContentType.TYPE_MULTIPART_ALTERNATIVE_STRING))
{
//The message has attachments or we are at the top level of the message.
//Extract all of the parts within the MimeBodyPart message.
findEmailBody(mbp.getContent());
}
else if (obj instanceof SupportedAttachmentPart)
{
_hasSupportedAttachment = true;
}
else if (obj instanceof UnsupportedAttachmentPart)
{
_hasUnsupportedAttachment = true;
}
2.
net.rim.blackberry.api.mail.BodyPart;
net.rim.blackberry.api.mail.TextBodyPart;
net.rim.blackberry.api.mail.Transport;
net.rim.device.api.ui.component.Dialog;
3.
Asigne el valor que devuelve TextBodyPart.getContent()como un String para obtener la parte de texto
sin formato del cuerpo del mensaje.
_plainTextMessage = (String)tbp.getContent();
4.
46
Gua de desarrollo
5.
Si hay ms datos disponibles para el objeto TextBodyPart, invoque Transport.more() para recuperar el
resto del objeto TextBodyPart.
Transport.more((BodyPart)tbp, true);
Ejemplo de cdigo: Recuperar el contenido de texto sin formato de un mensaje de correo electrnico
private void readEmailBody(TextBodyPart tbp)
{
_plainTextMessage = (String)tbp.getContent();
if (tbp.hasMore() && !tbp.moreRequestSent())
{
try
{
Transport.more((BodyPart)tbp, true);
}
catch (Exception ex)
{
Dialog.alert("Exception: " + ex.toString());
}
}
}
2.
net.rim.blackberry.api.mail.BodyPart;
net.rim.blackberry.api.mail.MimeBodyPart;
net.rim.blackberry.api.mail.Transport;
net.rim.device.api.ui.component.Dialog;
3.
4.
Cree una variable String para mantener la representacin de String del objeto MimeBodyPart.
String body = null;
47
Gua de desarrollo
5.
Si el dispositivo BlackBerry puede convertir el cuerpo HTML de un mensaje en una String, el objeto
MimeBodyPart ser una String. Asigne el objeto MimeBodyPart como una String y asgnelo a la
representacin String del cuerpo del mensaje.
if (obj instanceof String)
{
body = (String)obj;
}
6.
Si el dispositivo BlackBerry no puede convertir el cuerpo HTML de un mensaje en una String, el objeto
MimeBodyPart ser una matriz de bytes. Cree una instancia nueva de String utilizando como parmetro el
objeto MimeBodyPart asignado como una matriz de bytes. Asigne la String a la representacin de String
del cuerpo del mensaje.
else if (obj instanceof byte[])
{
body = new String((byte[])obj);
}
7.
if (mimeType.indexOf(ContentType.TYPE_TEXT_PLAIN_STRING) != -1)
{
8.
9.
Si hay ms datos disponibles para el objeto MimeBodyPart, invoque Transport.more() para recuperar el
resto de los datos del objeto MimeBodyPart.
Transport.more((BodyPart)mbp, true);
10. Compruebe si la representacin de String del contenido del objeto MimeBodyPart contiene
ContentType.TYPE_TEXT_HTML_STRING para determinar si el objeto MimeBodyPart es el cuerpo HTML del
mensaje.
else if (mimeType.indexOf(ContentType.TYPE_TEXT_HTML_STRING) != -1)
{
12. Si hay ms datos disponibles para el objeto MimeBodyPart, invoque Transport.more() para recuperar el
resto del objeto MimeBodyPart.
48
Gua de desarrollo
Transport.more((BodyPart)mbp, true);
49
Gua de desarrollo
Notificar a una aplicacin del dispositivo BlackBerry que est a punto de enviarse un mensaje de
correo electrnico
2.
net.rim.blackberry.api.mail.NoSuchServiceException;
net.rim.blackberry.api.mail.SendListener;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Store;
3.
4.
5.
6.
2.
3.
50
Notificar a una aplicacin del dispositivo BlackBerry que est a punto de enviarse un mensaje SMS
Gua de desarrollo
4.
2.
3.
4.
Aada un SendListener.
SMS.addSendListener(smsSL);
Enviar un mensaje
1.
2.
net.rim.blackberry.api.mail.Address;
net.rim.blackberry.api.mail.AddressException;
net.rim.blackberry.api.mail.Folder;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.MessagingException;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Store;
net.rim.blackberry.api.mail.Transport;
3.
Especifique una carpeta en la que guardar una copia del mensaje enviado.
Store store = Session.getDefaultInstance().getStore();
Folder[] folders = store.list(Folder.SENT);
Folder sentfolder = folders[0];
msg = new Message(sentfolder);
4.
5.
Gua de desarrollo
Enviar un mensaje
try
{
toList[0]= new Address("ming.li@example.com", "Ming Li");
}
6.
En un bloque catch, administre una AddressException, que se muestra si una direccin es no vlida.
catch(AddressException e)
{
System.out.println(e.toString());
}
7.
8.
9.
Invoque Message.setFrom(Address).
Address from = new Address("ming.li@example.com", "Ming Li");
msg.setFrom(from);
12. Invoque Session.getTransport() y almacene el objeto devuelto en una variable de tipo Transport. El
objeto Transport representa el protocolo de transporte de mensajes.
Transport trans = Session.getTransport();
trans.send(msg);
}
catch(MessagingException e)
{
System.out.println(e.getMessage());
}
52
Responder a un mensaje
Gua de desarrollo
Responder a un mensaje
1.
2.
net.rim.blackberry.api.mail.Folder;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Store;
net.rim.blackberry.api.mail.Transport;
3.
4.
Invoque Store.list(INBOX) para recuperar todas las carpetas en la carpeta INBOX. Almacene las carpetas
en una matriz Folder.
Folder[] folders = store.list(INBOX);
5.
6.
Invoque Folder.getMessages() para recuperar los mensajes de la carpeta Bandeja de entrada. Almacene
los mensajes en una matriz Message.
Message[] messages = inbox.getMessages();
7.
Invoque Message.reply(Boolean) y especifique true para responder a todos los destinatarios del mensaje
o false para responder slo al remitente.
if( messages.length > 0 )
{
Message msg = messages[0];
}
Message reply = msg.reply(true);
8.
53
Reenviar un mensaje
Gua de desarrollo
Reenviar un mensaje
1.
2.
net.rim.blackberry.api.mail.Address;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.MessagingException;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Transport;
Invoque Message.forward() en un objeto Message existente. La lnea del asunto de un mensaje reenviado
se establece automticamente como RV:asunto_original.
Message fwdmsg = msg.forward();
3.
4.
5.
6.
Invoque Message,setContent(String) para establecer el contenido del mensaje que aparece antes del
mensaje original.
try
{
7.
8.
Invoque Transport.send(Message).
try
{
trans.send(fwdmsg);
}
catch(MessagingException e)
{
System.out.println(e.getMessage());
}
54
Gua de desarrollo
2.
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.MessageArguments;
net.rim.blackberry.api.mail.Folder;
net.rim.blackberry.api.mail.FolderNotFoundException;
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.Store;
Recupere el almacn.
Store store = Session.waitForDefaultSession().getStore();
3.
Pasos
a.
b.
Invoque Store.list().
Invoque Store.findFolder(String).
Folder[] folders = store.findFolder("Inbox");
a.
55
Gua de desarrollo
Tarea
Pasos
Folder folder =
store.getFolder("Mailbox - Yan Wang/Inbox/
Projects");
b.
a.
b.
Archivar un mensaje
56
Gua de desarrollo
Mensajes personalizados
Mensajes personalizados
Ambos mdulos forman parte de la misma aplicacin pero tienen puntos de entrada diferentes.
Debe determinar la funcionalidad que forma parte de cada mdulo. Por ejemplo, un elemento del men que
permite al usuario eliminar un mensaje o marcarlo como ledo debe formar parte del mdulo de servicio. Un
elemento del men que permite al usuario abrir o responder a un mensaje debe formar parte del mdulo de IU.
Consulte la aplicacin de ejemplo Demostracin de lista de mensajes que se incluye en el BlackBerry Java SDK para
ver una demostracin sobre cmo utilizar esta API.
57
Gua de desarrollo
2.
3.
4.
Cree un proyecto con la configuracin que inicia la aplicacin automticamente. En el BlackBerry Java Plug-in
para Eclipse, seleccione la casilla de verificacin Auto-run on startup que est en el Descriptor de aplicacin de
BlackBerry. Para obtener ms informacin, consulte la Gua de desarrollo de BlackBerry Java Plug-in para Eclipse .
Cree una clase con los campos y mtodos para el mdulo.
Compile el proyecto en un archivo .jad.
Incluya el archivo .jad con los archivos .jad del mdulo IU y la parte principal de la aplicacin.
2.
3.
En main(), compruebe si el valor del parmetro args indica que la aplicacin debe iniciar el mdulo del servicio
o el mdulo de la IU.
if( args.length == 1 && args[ 0 ].equals( "service" ) )
{
}
} else if( args.length == 1 && args[ 0 ].equals( "gui" ) )
{
}
4.
Si la aplicacin debe iniciar el mdulo del servicio, en la primera declaracin de if, cree una instancia de una
clase que contenga la funcionalidad y elementos del servicio. Obtenga una referencia a un objeto
ApplicationMessageFolderRegistry.
MLSampleService service = new MLSampleService();
ApplicationMessageFolderRegistry reg =
ApplicationMessageFolderRegistry.getInstance();
5.
58
Si la aplicacin debe iniciar el mdulo de la IU, en la primera declaracin de else if, cree una instancia de una
clase que contenga la funcionalidad y elementos de la IU. Por ejemplo, el mdulo de la IU debe iniciarse si el
usuario del dispositivo BlackBerry hace clic en el icono de la aplicacin en la pantalla Inicio o abre un mensaje
personalizado en la aplicacin Mensajes. Muestre la IU de la aplicacin y agregue la aplicacin al distribuidor de
eventos.
Gua de desarrollo
Ejemplo de cdigo: Iniciar el mdulo para procesos en segundo plano o el mdulo para la IU
import net.rim.blackberry.api.messagelist.*;
public static void main( String[] args )
{
try
{
if( args.length == 1 && args[ 0 ].equals( "service" ) )
{
MLSampleService service = new MLSampleService();
ApplicationMessageFolderRegistry reg =
ApplicationMessageFolderRegistry.getInstance();
}
else if( args.length == 1 && args[ 0 ].equals( "gui" ) )
{
MLSampleGui gui = new MLSampleGui();
gui.showGui();
gui.enterEventDispatcher();
}
}
}
2.
3.
59
Gua de desarrollo
int MESSAGE_TYPE = 0;
int STATUS_NEW = ApplicationMessage.Status.UNOPENED;
int STATUS_OPENED = ApplicationMessage.Status.OPENED;
reg.registerMessageIcon( MESSAGE_TYPE, STATUS_NEW, newIcon );
reg.registerMessageIcon( MESSAGE_TYPE, STATUS_OPENED, openedIcon );
2.
3.
4.
5.
6.
60
Gua de desarrollo
7.
8.
2.
3.
4.
61
Gua de desarrollo
5.
2.
3.
4.
especifica que el indicador puede tener un valor numrico asociado (por ejemplo, un nuevo recuento de
mensajes). El tercer parmetro especifica que el indicador debe ser visible.
ApplicationIndicator indicator = reg.register( icon, false, true);
5.
6.
62
Gua de desarrollo
Ocultar un indicador
Ocultar un indicador
1.
2.
appIndicator.setVisible( false );
2.
63
Gua de desarrollo
Archivos adjuntos
Archivos adjuntos
Puede utilizar la API de correo del paquete net.rim.blackberry.api.mail para administrar archivos adjuntos
de mensajes de correo electrnico entrantes e incluir archivos adjuntos en mensajes de correo electrnico
salientes de un dispositivo BlackBerry. Un archivo adjunto se representa como un objeto BodyPart separado en
un mensaje Multipart.
2.
3.
Implemente el mtodo supports(String) para especificar el tipo de contenido del archivo adjunto
compatible con el gestor.
public boolean supports(String contentType)
{
return (contentType.toLowerCase().indexOf("contenttype") != -1 ? true : false);
}
4.
Implemente el mtodo menuString() para especificar el texto del elemento del men que aparece cuando
un usuario selecciona un archivo adjunto.
public String menuString()
{
return "Custom Attachment Viewer";
}
5.
Implemente el mtodo run() para especificar lo que debe suceder cuando un usuario hace clic en el elemento
del men. En el ejemplo de cdigo siguiente, una pantalla nueva utiliza la clase RichTextField para mostrar
una representacin String del contenido del archivo adjunto.
public void run(Message m, SupportedAttachmentPart p)
{
MainScreen view = new MainScreen();
view.setTitle("Attachment Viewer");
view.add(new RichTextField(new String((byte[])p.getContent())));
}
64
Gua de desarrollo
6.
2.
net.rim.blackberry.api.mail.Message;
net.rim.blackberry.api.mail.MessagingException;
net.rim.blackberry.api.mail.Multipart;
net.rim.blackberry.api.mail.Session;
net.rim.blackberry.api.mail.SupportedAttachmentPart;
net.rim.blackberry.api.mail.Transport;
3.
Cree un objeto SupportedAttachmentPart, designando el objeto Multipart como su padre, para crear
cada componente de la pantalla.
SupportedAttachmentPart attach = new SupportedAttachmentPart( multipart,
"application/x-example", "filename", data);
4.
65
Gua de desarrollo
multipart.addBodyPart(attach);
5.
6.
7.
Invoque Transport.send(Message).
try
{
trans.send(msg);
}
catch(MessagingException e)
{
System.out.println(e.getMessage());
}
66
Gua de desarrollo
2.
3.
4.
String
String
String
String
fileSize
fileName
fileType
filePath
=
=
=
=
getFileSize(BodyPart bodyPart);
getFileName(BodyPart bodyPart);
getFileContentType(BodyPart bodyPart);
getDownloadedFileName(BodyPart bodyPart);
5.
67
Calendario
Gua de desarrollo
Calendario
Abrir el calendario
1.
2.
3.
2.
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.Event;
javax.microedition.pim.EventList;
net.rim.blackberry.api.invoke.CalendarArguments;
net.rim.blackberry.api.invoke.Invoke;
net.rim.device.api.system.ControlledAccessException;
3.
4.
Si su aplicacin no tiene permiso para acceder la aplicacin que invoca, busque una
ControlledAccessException.
68
Gua de desarrollo
import net.rim.blackberry.api.invoke.CalendarArguments;
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.device.api.system.ControlledAccessException;
2.
3.
4.
2.
java.util.Date;
javax.microedition.pim.Event;
javax.microedition.pim.EventList;
javax.microedition.pim.PIM;
javax.microedition.pim.RepeatRule;
Invoque openPIMList() para abrir una lista de entradas del calendario. Proporcione lo siguiente como
parmetros: el tipo de lista que se va a abrir (PIM.EVENT_LIST) y el modo en el que se debe abrir la lista.
READ_WRITE
READ_ONLY
WRITE_ONLY
EventList eventList = null;
try
{
eventList = (EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST,
PIM.READ_WRITE);
}
catch (PimException e)
{
// Handle exception.
}
3.
Para actualizar informacin del calendario, realice cualquiera de las tareas siguientes:
69
Gua de desarrollo
Tarea
Crear una cita
Pasos
Invoque createEvent() en una lista de eventos.
Event event = eventList.createEvent();
a.
b.
c.
70
Gua de desarrollo
Tarea
Pasos
RepeatRule recurring = new RepeatRule();
recurring.setInt(RepeatRule.FREQUENCY,
RepeatRule.MONTHLY);
recurring.setInt(RepeatRule.DAY_IN_MONTH, 14);
d.
a.
b.
c.
a.
b.
Invoque Event.commit().
if(event.isModified())
{
event.commit();
}
2.
71
Gua de desarrollo
EventList eventList =
(EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_ONLY);
Enumeration e = eventList.items();
3.
Invoque PIMItem.getFields() para recuperar una matriz de ID de campos que tengan datos relativos a una
tarea particular. Invoque PIMItem.getString() para recuperar los valores del campo.
while (e.hasMoreElements())
{
Event event = (Event)e.nextElement();
int[] fieldIds = event.getFields();
int id;
for(int index = 0; index < fieldIds.length; ++index)
{
id = fieldIds[index];
if(e.getPIMList().getFieldDataType(id) == STRING)
{
for(int j=0; j < event.countValues(id); ++j)
{
String value = event.getString(id, j);
System.out.println(event.getFieldLable(id) + "=" + value);
}
}
}
}
2.
java.io.ByteArrayOutputStream;
java.util.Enumeration;
javax.microedition.pim.Event;
javax.microedition.pim.EventList;
javax.microedition.pim.PIM;
3.
4.
Utilice un redactor de flujo de salida para exportar entradas de calendario del dispositivo BlackBerry a un formato
de serie compatible, como iCal.
Invoque toSerialFormat() para escribir un elemento en el formato de serie. El parmetro enc especifica la
codificacin de caracteres para utilizar al programar en el flujo de salida. Las codificaciones de caracteres
compatibles incluyen "UTF8", "ISO-8859-1" y "UTF-16BE". Este parmetro no puede ser nulo.
EventList eventList =
(EventList)PIM.getInstance().openPIMList( PIM.EVENT_LIST, PIM.READ_ONLY );
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
Enumeration e = eventList.items();
while (e.hasMoreElements())
{
72
Gua de desarrollo
2.
3.
java.io.ByteArrayInputStream;
java.io.ByteArrayOutputStream;
javax.microedition.pim.Event;
javax.microedition.pim.EventList;
javax.microedition.pim.PIM;
javax.microedition.pim.EventList;
javax.microedition.pim.PIM;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
net.rim.blackberry.api.pdap.PIMListListener;
73
Gua de desarrollo
2.
Notificar a una aplicacin del dispositivo BlackBerry cuando cambie la lista predeterminada de
entradas de calendario
3.
2.
3.
4.
Para que la aplicacin utilice siempre la PIMList predeterminada, almacene una referencia a la PIMList
deseada y disee el mtodo ListChangeListener.defaultListChanged() para actualizar la referencia
cuando cambie la lista predeterminada.
74
Gua de desarrollo
import
import
import
import
import
2.
java.util.*;
javax.microedition.pim.*;
net.rim.blackberry.api.pdap.BlackBerryEvent;
net.rim.blackberry.api.pdap.BlackBerryEventList;
net.rim.blackberry.api.pdap.BlackBerryPIMItem;
Invoque PIM.openPIMList() para abrir una lista de entradas del calendario como un objeto
BlackBerryEventList.
BlackBerryEventList eventList = null;
try
{
eventList = (BlackBerryEventList)
PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
}
catch (PIMException e)
{
// Handle exception
}
3.
4.
Modifique la entrada.
if (eventList.isSupportedField(Event.SUMMARY))
{
event.addString(Event.NOTE, Event.ATTR_NONE, "Remember to bring food");
}
5.
Gua de desarrollo
Ejemplo de cdigo
BlackBerryEventList eventList = null;
try
{
eventList = (BlackBerryEventList)
PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
Enumeration events = eventList.items();
BlackBerryEvent event = (BlackBerryEvent) events.nextElement();
if (eventList.isSupportedField(Event.SUMMARY))
{
event.addString(Event.NOTE, Event.ATTR_NONE, "Remember to bring food");
}
if(event.isModified())
{
int result;
result =
((BlackBerryPIMItem) event).commit(BlackBerryEvent.DO_NOT_NOTIFY_ATTENDEES);
}
}
catch (PIMException e)
{
// Handle exception
}
2.
java.util.*;
javax.microedition.pim.*;
net.rim.blackberry.api.pdap.BlackBerryEvent;
net.rim.blackberry.api.pdap.BlackBerryEventList;
Invoque PIM.openPIMList() para abrir una lista de entradas del calendario como un objeto
BlackBerryEventList.
BlackBerryEventList eventList = null;
try
{
eventList = (BlackBerryEventList)
PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
}
catch (PIMException e)
{
// Handle exception
}
76
Gua de desarrollo
3.
4.
77
Gua de desarrollo
Lista de contactos
Lista de contactos
78
Gua de desarrollo
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.blackberry.api.invoke.AddressBookArguments;
import net.rim.device.api.system.ControlledAccessException;
2.
3.
Si su aplicacin no tiene permiso para acceder la aplicacin que invoca, busque una
ControlledAccessException.
1.
2.
net.rim.blackberry.api.invoke.AddressBookArguments;
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.device.api.system.ControlledAccessException;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
Invoque PIM.getInstance() para recuperar una instancia PIM, e invocar PIM.openPIMList(int, int)
para abrir la lista de contactos predeterminada, pasando como parmetros el tipo de lista que se va a abrir
(PIM.CONTACT_LIST) y el modo de acceso con el que se va a abrir la lista (PIM.READ_WRITE,
PIM.READ_ONLY, o PIM.WRITE_ONLY). Para abrir una lista de contactos con nombre, puede invocar en su lugar
PIM.openPIMList(int, int, String).
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
3.
4.
Cree una instancia de la clase AddressBookArguments, pasando un objeto Contact como parmetro.
AddressBookArguments abArg = new AddressBookArguments("ARG_VIEW", contact);
5.
79
Gua de desarrollo
6.
2.
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactGroup;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIM;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
net.rim.device.api.system.ControlledAccessException;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
javax.microedition.pim.PIMItem;
Invoque PIM.listPIMLists(int pimListType) para devolver una matriz de objetos String. La matriz
devuelta ofrece los nombres asignados por el sistema, uno para cada lista PIM del tipo especificado. La lista
predeterminada del tipo especificado se devuelve en el ndice 0 de la matriz.
String[] lists = PIM.listPIMLists(PIM.CONTACT_LIST);
3.
4.
Itere sobre la matriz que devuelve PIM.listPIMLists() para buscar el nombre asignado por el sistema a la
lista de contactos que desea mostrar.
Invoque BlackBerryPIMList.getPIMListUID() para obtener el UID de la lista de contactos.
long uid = cl.getPIMListUID();
5.
Invoque PIM.getInstance() para recuperar una instancia PIM, e invocar PIM.openPIMList(int, int,
long) para abrir la lista de contactos, pasando como parmetros el tipo de lista que se va a abrir
(PIM.CONTACT_LIST), el modo de acceso con el que se va a abrir la lista (PIM.READ_WRITE, PIM.READ_ONLY, o
PIM.WRITE_ONLY) y el UID.
BlackBerryContactList list = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE, uid);
6.
80
Gua de desarrollo
}
else if (item instanceof BlackBerryContactGroup)
{
...
}
7.
2.
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
net.rim.device.api.system.ControlledAccessException;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMList;
javax.microedition.pim.PIMException;
javax.microedition.pim.ContactList;
Para agregar el contacto nuevo a la lista de contactos predeterminada, invoque PIM.openPIMList(int, int)
para abrir una instancia de la lista de contactos predeterminada, pasando como parmetros el tipo de lista que
se va a abrir (PIM.CONTACT_LIST) y el modo de acceso PIM.READ_WRITE. Avance hasta el paso 4.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
3.
Para agregar el contacto nuevo a una lista de contactos que no sea la lista de contactos predeterminada, realice
las acciones siguientes:
a. Invoque PIM.listPIMLists(int), pasando como parmetro el tipo de lista (PIM.CONTACT_LIST), para
devolver una matriz de objetos String. La matriz devuelta ofrece los nombres asignados por el sistema a
cada lista de contactos. La lista de contactos predeterminada se devuelve en el ndice 0 de la matriz.
String[] lists = PIM.listPIMLists(PIM.CONTACT_LIST);
b.
c.
Itere sobre la matriz que devuelve PIM.listPIMLists() para buscar el nombre asignado por el sistema
a la lista de contactos que desea abrir.
Invoque PIM.openPIMList(int, int, String) para abrir la instancia de la lista de contactos, pasando
como parmetro el tipo de lista que se va a abrir (PIM.CONTACT_LIST), el modo de acceso
PIM.READ_WRITE y el nombre de la lista de contactos.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE, name);
4.
Gua de desarrollo
5.
Invoque uno o ms de los mtodos siguientes para agregar informacin referente al contacto nuevo. Para
obtener ms informacin acerca de mtodos PIMItem, consulte la referencia de API para BlackBerry Java
Development Environment.
addString()
addStringArray()
addDate()
addInt()
addBoolean()
addBinary()
6.
Invoque los mtodos siguientes para comprobar que la informacin cumple los requisitos de tamao y de tipo
del campo especificado del contacto.
Invoque ContactList.isSupportedField(int) para comprobar que el elemento es compatible con el
tipo de campo.
Invoque ContactList.isSupportedAttribute(int, int) para comprobar que el campo es
compatible con el atributo especificado.
Invoque PIMList.maxValues(int field) para comprobar el nmero de valores con los que es
compatible el campo.
7.
8.
82
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
javax.microedition.pim.PIMItem;
Gua de desarrollo
2.
Invoque PIM.getInstance() para recuperar una instancia PIM e invocar PIM.openPIMList() para abrir
una instancia de la lista de contactos, pasando como parmetros el tipo de lista que se va a abrir
(PIM.CONTACT_LIST), el modo de acceso con el que abrir la lista (PIM.READ_WRITE, PIM.READ_ONLY, o
PIM.WRITE_ONLY), y el nombre si no va a abrir la lista de contactos predeterminada.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
3.
Invoque PIMList.items() para recuperar una enumeracin de elementos de una lista de contactos.
Enumeration _enum = contactList.items();
4.
Invoque uno de los mtodos getter de PIMItem para recuperar informacin de contacto.
Para recuperar una matriz de campos que contengan los datos de un contacto especificado, invoque
PIMItem.getFields().
Para recuperar un String que represente el valor para un campo de contactos especificado, invoque
PIMItem.getString(int field, int index).
Para recuperar una fecha que represente el valor para un campo de contactos especificado, invoque
PIMItem.getDate(int field, int index).
while (_enum.hasMoreElements())
{
BlackBerryContact c = (BlackBerryContact)_enum.nextElement();
int[] fieldIds = c.getFields();
int id;
for(int index = 0; index < fieldIds.length; ++index)
{
id = fieldIds[index];
if(c.getPIMList().getFieldDataType(id) == BlackBerryContact.STRING)
{
for(int j=0; j < c.countValues(id); ++j)
{
String value = c.getString(id, j);
System.out.println(c.getPIMList().getFieldLabel(id) + "="
+ value);
}
}
}
}
83
Exportar un contacto
Gua de desarrollo
import
import
import
import
import
2.
3.
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
javax.microedition.pim.PIMItem;
Exportar un contacto
Puede exportar informacin de contacto de una lista de contactos de un dispositivo BlackBerry a un flujo de salida.
El proceso de exportacin convierte un elemento PIM en un flujo de salida de bytes que pueda importar otra
aplicacin. Puede exportar datos PIM a un formato de serie compatible invocando
PIM.toSerialFormat(PIMItem, OutputStream, String, String) y pasando como argumentos
PIMItem, el OutputStream en el que se programa el PIMItem serializado, el formato de codificacin de
caracteres que se va a utilizar al programar en el flujo de salida y el formato de serie compatible al que convertir,
como por ejemplo vCard.
1.
2.
java.io.UnsupportedEncodingException;
java.util.Enumeration;
javax.microedition.pim.Contact;
javax.microedition.pim.ContactList;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
3.
84
Importar un contacto
Gua de desarrollo
Importar un contacto
Puede importar informacin de contactos de un flujo de entrada compatible a una lista de contactos de un
dispositivo BlackBerry. Puede importar informacin de contacto invocando fromSerialFormat(InputStream,
String) y pasando como argumentos el PIMItem desde el que se programa el InputStream y el formato de
codificacin de caracteres que se va a utilizar. Los formatos de codificacin de caracteres compatibles incluyen
UTF8, ISO-8859-1 y UTF-16BE.
1.
2.
java.io.ByteArrayOutputStream;
javax.microedition.pim.Contact;
javax.microedition.pim.ContactList;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMItem;
3.
Abra una lista de contactos e invoque ContactList.importContact() para crear un contacto nuevo
utilizando un elemento PIM.
ContactList contactList = (ContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
Contact contact2 = contactList.importContact((Contact) pi[0]);
contact2.commit();
Eliminar un contacto
Puede eliminar un contacto de la lista de contactos predeterminada o bien de otra lista de contactos de un
dispositivo BlackBerry.
1.
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
net.rim.device.api.system.ControlledAccessException;
javax.microedition.pim.Contact;
javax.microedition.pim.ContactList;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
85
Gua de desarrollo
2.
3.
Para eliminar un contacto de una lista de contactos que no sea la lista de contactos predeterminada, realice las
acciones siguientes:
a. Invoque listPIMLists(int pimListType) para devolver una matriz de objetos String. La matriz
devuelta ofrece el nombre asignado por el sistema a cada lista de contactos. La lista de contactos
predeterminada se devuelve en el ndice 0 de la matriz.
String[] lists = PIM.listPIMLists(PIM.CONTACT_LIST);
b.
c.
Itere sobre la matriz que devuelve PIM.listPIMLists() para buscar el nombre asignado por el sistema
a la lista de contactos que desea eliminar.
Invoque PIM.openPIMList(int, int, String) para abrir la instancia de la lista de contactos, pasando
como parmetros el tipo de lista que se va a abrir (PIM.CONTACT_LIST), el modo de acceso con el que
abrir la lista (PIM.READ_WRITE, PIM.READ_ONLY, o PIM.WRITE_ONLY) y el nombre de la lista de
contactos.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE, name);
4.
5.
itemAdded(PIMItem item), que se invoca cuando se agrega un elemento a una lista de contactos
itemUpdated(PIMItem oldItem, PIMItem newItem), que se invoca cuando un elemento cambia
itemRemoved(PIMItem item), que se invoca cuando se elimina un elemento de una lista de contactos
1.
86
Gua de desarrollo
import
import
import
import
2.
net.rim.blackberry.api.pdap.PIMListListener;
net.rim.device.api.system.ControlledAccessException;
javax.microedition.pim.PIMList;
javax.microedition.pim.PIMException;
PIM.openPIMList(int, int) para abrir la instancia de la lista de contactos predeterminada, pasando como
parmetros el tipo de la lista que se va a abrir (PIM.CONTACT_LIST) y el modo de acceso con el que abrir la
lista (PIM.READ_WRITE, PIM.READ_ONLY, o PIM.WRITE_ONLY). Avance hasta el paso 4.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
3.
Para recibir notificaciones de cambios de una lista de contactos que no sea la lista de contactos predeterminada,
realice las acciones siguientes:
a. Invoque listPIMLists(int), pasando como parmetro el tipo de lista que se va a abrir
(PIM.CONTACT_LIST), para devolver una matriz de objetos String. La matriz devuelta ofrece el nombre
asignado por el sistema a cada lista de contactos. La lista de contactos predeterminada se devuelve en el
ndice 0 de la matriz.
String[] lists = PIM.listPIMLists(PIM.CONTACT_LIST);
b.
c.
Itere sobre la matriz que devuelve PIM.listPIMLists() para buscar el nombre asignado por el sistema
a la lista de contactos respecto a la que desea recibir notificaciones de cambios.
Invoque PIM.openPIMList(int, int, String) para abrir la instancia de la lista de contactos, pasando
como parmetros el tipo de lista que se va a abrir (PIM.CONTACT_LIST), el modo de acceso con el que
abrir la lista (PIM.READ_WRITE, PIM.READ_ONLY, o PIM.WRITE_ONLY) y el nombre de la lista de
contactos.
BlackBerryContactList contactList = (BlackBerryContactList)
PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE, name);
4.
5.
Gua de desarrollo
6.
Cada lista de contactos tiene un identificador nico, que es el valor que devuelve createPIMList().
Las listas de contactos no tienen registros de servicio y no admiten la sincronizacin inalmbrica.
Las aplicaciones pueden registrarse para escuchar los cambios en la lista de contactos invocando
BlackBerryPIMList.addListener().
1.
2.
javax.microedition.pim.Contact;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
javax.microedition.pim.PIMItem;
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIM;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
3.
4.
88
El nombre de la lista de contactos es el que usted proporciona ("prueba" en el ejemplo anterior), a menos que
haya otra lista de contactos con ese nombre en el dispositivo, en cuyo caso se agrega un nmero al nombre para
hacerlo nico. Para hacer referencia a la lista de contactos ms tarde, debe utilizar el UID de la lista, que es el
valor que devuelve createPIMList().
Opcionalmente, rellene la lista de contactos.
Gua de desarrollo
BlackBerryContactList contactList =
(BlackBerryContactList) myPIM.openPIMList(PIM.CONTACT_LIST,
PIM.READ_WRITE, listUID);
Contact contact = contactList.createContact();
String[] name = new String[contactList.stringArraySize(Contact.NAME)];
name[Contact.NAME_GIVEN] = "Noha";
name[Contact.NAME_FAMILY] = "Toma";
contact.addStringArray(Contact.NAME, PIMItem.ATTR_NONE, name);
contact.commit();
5.
Ejemplo de cdigo
BlackBerryPIM myPIM = (BlackBerryPIM) PIM.getInstance();
try
{
// create a contact list
long listUID = myPIM.createPIMList(PIM.CONTACT_LIST, "test");
// add a contact to the list
BlackBerryContactList contactList =
(BlackBerryContactList) myPIM.openPIMList(PIM.CONTACT_LIST,
PIM.READ_WRITE, listUID);
Contact contact = contactList.createContact();
String[] name = new String[contactList.stringArraySize(Contact.NAME)];
name[Contact.NAME_GIVEN] = "Noha";
name[Contact.NAME_FAMILY] = "Toma";
contact.addStringArray(Contact.NAME, PIMItem.ATTR_NONE, name);
contact.addString(Contact.TEL, Contact.ATTR_HOME, "519-555-0151");
contact.addString(Contact.TEL, Contact.ATTR_WORK, "519-555-0199");
contact.commit();
// close the contact list
contactList.close();
}
catch (PIMException e)
{
System.out.println(e.getMessage());
}
89
Gua de desarrollo
2.
3.
4.
Si sabe el nombre o el UID de la lista de contactos que quiere eliminar, vaya al paso 6.
Recupere la matriz de listas de contactos.
String[] lists = myPIM.listPIMLists(PIM.CONTACT_LIST);
5.
6.
Ejemplo de cdigo
BlackBerryPIM myPIM = (BlackBerryPIM) PIM.getInstance();
try
{
myPIM.removePIMList(PIM.CONTACT_LIST, "test",
BlackBerryPIM.REMOVE_NON_EMPTY_LIST);
}
catch (BlackBerryPIMRemovalException e)
{
System.out.println(e.getMessage());
}
Gua de desarrollo
import net.rim.blackberry.api.pdap.BlackBerryContact;
import net.rim.blackberry.api.phone.*;
2.
3.
4.
Ejemplo de cdigo
public void callIncoming(int callID) // in a phone listener
{
StringBuffer strBuffer = new StringBuffer();
PhoneCall call = Phone.getCall(callID);
BlackBerryContact contact = call.getContact();
if(contact != null)
{
if(contact.countValues(BlackBerryContact.ADDR) > 0)
{
String[] strArray = contact.getStringArray(BlackBerryContact.ADDR, 0);
String city = strArray[BlackBerryContact.ADDR_LOCALITY];
if(city != null && city.length() > 0)
{
strBuffer.append(city);
}
String country = strArray[BlackBerryContact.ADDR_COUNTRY];
if(country != null && country.length() > 0)
{
if(city != null && city.length() > 0)
{
strBuffer.append(", ");
}
strBuffer.append(country);
}
}
}
// use the contact info, for example,
// display it on the incoming phone screen
}
Informacin relacionada
91
Gua de desarrollo
2.
3.
Ejemplo de cdigo
String phoneNum = "519-555-0151";
PhoneCallLogID callLog = new PhoneCallLogID(phoneNum);
BlackBerryContact contact = callLog.getContact();
if (contact != null)
{
String[] name = contact.getStringArray(Contact.NAME, 0);
add(new RichTextField("The matching contact is " + name[Contact.NAME_GIVEN]
+ " " + name[Contact.NAME_FAMILY]));
}
else
{
add(new RichTextField("There is no matching contact"));
}
92
net.rim.blackberry.api.pdap.BlackBerryContact;
net.rim.blackberry.api.pdap.BlackBerryContactList;
net.rim.blackberry.api.pdap.BlackBerryPIMList;
net.rim.blackberry.api.phone.Phone;
Gua de desarrollo
import
import
import
import
2.
java.util.*;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMException;
javax.microedition.pim.PIMItem;
b.
Ejemplo de cdigo
try
{
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
93
Gua de desarrollo
Vincular un contacto
Puede vincular un contacto de su aplicacin con un contacto de la aplicacin Contactos del dispositivo BlackBerry.
Puede decidir cmo interactuar con el usuario del dispositivo BlackBerry cuando vincula un contacto. Los pasos
siguientes describen un enfoque posible.
Antes de comenzar:
Cree los contactos en su aplicacin creando una clase que implemente la interfaz LinkableContact y tambin
una instancia de la misma.
Defina una clase que ample LinkedContactInfoProvider y registre la clase con su aplicacin. Para obtener
ms informacin, consulte Crear un proveedor de informacin para un contacto vinculado.
1.
2.
94
Compruebe si hay un contacto en la aplicacin de contactos (un objeto BlackBerryContact) que sea un
candidato para la vinculacin de su contacto. El mtodo
LinkedContactUtilities.getContactLinkCandidate() devuelve BlackBerryContact si encuentra
Gua de desarrollo
un contacto en la aplicacin de contactos que tenga la misma direccin de correo electrnico o el mismo nmero
de telfono que el LinkableContact que se le ha pasado. Si no hay ningn contacto coincidente, el mtodo
devuelve null.
BlackBerryContact bbContact =
LinkedContactUtilities.getContactLinkCandidate(linkableContact);
3.
4.
Si no se encuentra ninguna coincidencia, haga que el usuario seleccione un contacto de la aplicacin Contactos
para vincularlo con el contacto seleccionado.
BlackBerryContactList contacts = null;
try
{
contacts = (BlackBerryContactList) PIM.getInstance().
openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
}
catch(PIMException e)
{
ContactLinkingDemo.errorDialog("Couldn't open contacts list.");
return;
}
Object choice = contacts.choose();
if(choice instanceof BlackBerryContact)
{
bbContact = (BlackBerryContact)choice;
}
5.
6.
Eliminar un vnculo
Puede eliminar un vnculo entre un contacto de su aplicacin y un contacto de la aplicacin Contactos del
dispositivo BlackBerry.
1.
Gua de desarrollo
import net.rim.blackberry.api.pdap.contactlinking.*;
2.
3.
Descripcin
aplicaciones de redes sociales
aplicaciones de mensajera instantnea
aplicaciones que no son aplicaciones de redes sociales ni aplicaciones
de mensajera instantnea
Si un contacto de la aplicacin Contactos est vinculado con contactos de varias aplicaciones de terceros, los
elementos del men de la aplicacin de contactos se agrupan con otras aplicaciones del mismo grupo.
Los elementos del men de redes sociales se agrupan dentro del elemento del men Redes sociales.
Los elementos del men de mensajera instantnea se agrupan dentro el elemento del men Mensajera
instantnea.
Los elementos del men de otros tipos de aplicaciones se agrupan dentro del elemento del men Contactar
mediante.
Los elementos del men de aplicaciones de terceros con contactos vinculados se integran con el men de la
aplicacin Contactos.
96
Gua de desarrollo
Situacin
Resultado
Un grupo contiene una aplicacin con
El elemento del men de la aplicacin aparece en el men de la
contactos vinculados. La aplicacin
aplicacin Contactos.
contiene un elemento del men.
Un grupo contiene una aplicacin con
El nombre de la aplicacin aparece en el men. Al seleccionar el
contactos vinculados. La aplicacin
nombre aparece un cuadro de dilogo que contiene un botn para
contiene varios elementos del men.
cada elemento del men.
Un grupo contiene varias aplicaciones con El elemento del men del grupo (como Redes sociales) aparece en el
contactos vinculados.
men. Al seleccionar el elemento del men del grupo, se muestra un
cuadro de dilogo con un botn para cada aplicacin con contactos
vinculados en el grupo.
2.
net.rim.blackberry.api.menuitem.ApplicationMenuItem;
net.rim.blackberry.api.pdap.contactlinking.LinkedContactConstants;
net.rim.blackberry.api.pdap.contactlinking.LinkedContactUtilities;
net.rim.device.api.system.ApplicationDescriptor;
3.
4.
5.
Cree una matriz con una o ms instancias del elemento del men.
ApplicationMenuItem[] items = new ApplicationMenuItem[1];
items[0] = new LinkedMenuItem();
6.
97
Gua de desarrollo
2.
3.
Implemente getAppImage() y devuelva el icono que representa su aplicacin. El mtodo debe devolver una
imagen para que aparezca cualquier informacin sobre su contacto vinculado cuando un usuario vea un contacto
en la aplicacin de Contactos.
public Image getAppImage()
{
return _image;
}
4.
Implemente getAppName() y devuelva el nombre de su aplicacin. El mtodo debe devolver un nombre para
que aparezca la informacin sobre el contacto vinculado cuando un usuario edite un contacto en la aplicacin
Contactos.
public String getAppName()
{
return _appName;
}
5.
98
Para indicar los campos LinkedContactInfoProvider (nombre de usuario, disponibilidad o estado) que
admite su aplicacin, implemente isSupported(). De forma predeterminada, los campos no se admiten. Debe
implementar isSupported() slo si su aplicacin admite cualquiera de los campos.
Gua de desarrollo
6.
Implemente requestFields() para especificar la informacin para mostrar para el contacto en la aplicacin
Contactos. El mtodo es invocado por el marco cuando necesita mostrar informacin para el contacto vinculado
en la aplicacin Contactos. Especifique el nombre del contacto, el estado y la disponibilidad actual, en funcin
de los campos que haya definido como admitidos en isSupported().
public void requestFields(String contactID, final LinkedContactCallback callback,
int fields)
{
LinkableContact contact = ContactListScreen.getUserForID(contactID);
if((fields & LinkedContactInfoProvider.AVAILABILITY) != 0)
{
callback.setAvailability(LinkedContactInfoProvider.AVAILABILITY_ONLINE);
}
if((fields & LinkedContactInfoProvider.STATUS) != 0)
{
callback.setStatusString("<Sample contact status>");
}
if((fields & LinkedContactInfoProvider.USER_NAME) != 0)
{
callback.setUserName(contact.toString());
}
}
7.
Este ejemplo registra la aplicacin como una aplicacin de redes sociales utilizando el campo
COMPOSE_SN_MENU_GROUP en LinkedContactConstants.
Cuando un usuario muestra un contacto de la aplicacin Contactos vinculado a uno de los suyos, la informacin
que defini en el proveedor de informacin se visualiza en la pantalla del contacto. El marco determina la
disposicin de la informacin. En este ejemplo, dado que la aplicacin fue definida como una aplicacin de red
social, la informacin se muestra en la seccin de Redes sociales del contacto.
Ejemplo de cdigo: Crear un proveedor de informacin para un contacto vinculado
99
Gua de desarrollo
Para consultar un ejemplo de creacin de un proveedor de informacin para un contacto vinculado, consulte la
clase SampleLinkedContactInfoProvider en la aplicacin de ejemplo de demostracin de vinculacin de
contactos que se incluye enBlackBerry Java SDK.
100
Lista de tareas
Gua de desarrollo
Lista de tareas
2.
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
net.rim.blackberry.api.invoke.Invoke;
net.rim.blackberry.api.invoke.TaskArguments;
3.
4.
2.
101
Gua de desarrollo
import javax.microedition.pim.ToDoList;
import net.rim.blackberry.api.invoke.Invoke;
import net.rim.blackberry.api.invoke.TaskArguments;
2.
3.
Invoque createToDo() para crear un objeto ToDo nuevo y agregue informacin al nuevo objeto ToDo.
ToDo todo = tdl.createToDo();
todo.addString(ToDo.SUMMARY, 0, "Walk the Dog");
4.
2.
2.
102
Gua de desarrollo
2.
3.
4.
java.util.Date;
javax.microedition.pim.PIMList;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
Antes de definir o recuperar un valor de campo, verifique que el elemento admite el campo llamando a
ToDoList.isSupportedField(int).
Invoque PIMList.getFieldDataType(int) para recuperar el tipo de datos del campo.
Invoque uno de los mtodos siguientes para establecer los datos de campo:
addString()
addDate()
addInt()
addBoolean()
addBinary()
if (todoList.isSupportedField(ToDo.SUMMARY))
{
task.addString(ToDo.SUMMARY, ToDo.ATTR_NONE, "Create project plan");
}
if (todoList.isSupportedField(ToDo.DUE))
{
Date date = new Date();
task.addDate(ToDo.DUE, ToDo.ATTR_NONE, (date + 17280000));
}
if (todoList.isSupportedField(ToDo.NOTE))
{
task.addString(ToDo.NOTE, ToDo.ATTR_NONE, "Required for meeting");
}
if (todoList.isSupportedField(ToDo.PRIORITY))
{
task.addInt(Todo.PRIORITY, ToDo.ATTR_NONE, 2);
}
2.
3.
Para sustituir un valor existente por un valor nuevo, invoque el mtodo de configuracin pertinente, como por
ejemplo ToDo.setString().
Para determinar si ya se ha definido un valor para el campo, invoque ToDo.countValues().
103
Gua de desarrollo
if (task.countValues(ToDo.SUMMARY) > 0)
{
task.setString(ToDo.SUMMARY, 0, ToDo.ATTR_NONE, "Review notes");
}
4.
Cree cdigo para administrar una FieldFullException que lance un mtodo como addString() cuando
ya exista un valor.
2.
3.
Antes de realizar cambios, invoque isModified() para determinar si algn campo de la tarea ha cambiado
desde que la tarea se guard por ltima vez.
Invoque commit().
if(task.isModified())
{
task.commit();
}
2.
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
3.
4.
Invoque ToDo.getFields() para recuperar una matriz de ID de campos que tienen datos correspondientes
a un elemento ToDo concreto.
Invoque PIMItem.getString() para recuperar los valores del campo.
while (enum.hasMoreElements())
{
ToDo task = (ToDo)enum.nextElement();
int[] fieldIds = task.getFields();
int id;
for(int index = 0; index < fieldIds.length; ++index)
{
id = fieldIds[index];
104
Gua de desarrollo
if(task.getPIMList().getFieldDataType(id) == STRING)
{
for(int j=0; j < task.countValues(id); ++j)
{
String value = task.getString(id, j);
System.out.println(task.getFieldLable(id) + "=" + value);
}
}
java.io.ByteArrayOutputStream;
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
2.
Utilice un redactor de flujo de salida para exportar tareas del dispositivo BlackBerry a un formato de serie
compatible.
3.
4.
ToDoList todoList =
(ToDoList)PIM.getInstance().openPIMList(PIM.TODO_LIST, PIM.READ_ONLY);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
String[] dataFormats = PIM.getInstance().supportedSerialFormats(PIM.TODO_LIST);
Enumeration e = todoList.items();
while (e.hasMoreElements())
{
ToDo task = (ToDo)e.nextElement();
PIM.getInstance().toSerialFormat(task, byteStream, "UTF8", dataFormats[0]);
}
java.io.ByteArrayInputStream;
javax.microedition.pim.PIM;
javax.microedition.pim.PIMItem;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
105
Gua de desarrollo
2.
3.
2.
java.util.Enumeration;
javax.microedition.pim.PIM;
javax.microedition.pim.ToDo;
javax.microedition.pim.ToDoList;
3.
2.
3.
Invoque ToDoList.close().
Cree cdigo que administre excepciones.
try
{
todoList.close();
}
catch (PIMException e)
106
Gua de desarrollo
{
}
Notificar a una aplicacin del dispositivo BlackBerry cuando una lista de tareas cambia
// Handle exception
2.
3.
107
Gua de desarrollo
Telfono
Telfono
10
El paquete net.rim.blackberry.api.phone contiene las API que puede utilizar para acceder la aplicacin en
el dispositivo BlackBerry. Puede utilizar este paquete para hacer llamadas, cambiar entre las lneas de telfono
disponibles, recibir eventos de notificacin y cambiar las opciones del telfono.
2.
Cree una instancia de la clase PhoneArguments, pasando el campo ARG_CALL y el nmero de telfono de
destino.
PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL, "519-555-0100");
3.
4.
Busque IllegalArgumentException.
2.
108
Invoque initiateCall() para utilizar una lnea de telfono especfica para hacer una llamada. Para el nmero
de destino, pase un texto de usuario o nmero no modificable. En el ejemplo de cdigo siguiente, la aplicacin
hace una llamada al nmero de destino 519-555-0100 y utiliza el ID de lnea que devuelve al ndice 0.
Gua de desarrollo
Phone.initiateCall(Phone.getLineIds()[0], "519-555-0100");
2.
Gua de desarrollo
2.
3.
4.
5.
Administre eventos entrantes del telfono utilizando los mtodos de devolucin de llamada de
PhoneListener. Por ejemplo, para recibir la notificacin de que una llamada se ha desconectado, implemente
la notificacin en callDisconnected(int); para recibir la notificacin de que ha llegado una llamada nueva,
implemente la notificacin en callIncoming(int); y para recibir la notificacin de que hay una llamada en
espera, implemente la notificacin en callWaiting(int).
Para ver una lista completa de mtodos de devolucin de llamadas de PhoneListener, consulte la referencia
de API para BlackBerry Java Development Environment
Para anular el registro de PhoneListener, invoque Phone.removePhoneListener().
Phone.removePhoneListener(this);
2.
3.
4.
110
Gua de desarrollo
b.
2.
3.
Invoque numberOfCalls() para recuperar el nmero total de llamadas de una carpeta especificada de registro
de llamadas (FOLDER_MISSED_CALLS o FOLDER_NORMAL_CALLS).
int numberOfCalls = _logs.numberOfCalls(PhoneLogs.FOLDER_NORMAL_CALLS);
4.
5.
Invoque PhoneCallLog.getType() para recuperar el tipo de llamada. Los valores devueltos posibles son
TYPE_MISSED_CALL_OPENED, TYPE_MISSED_CALL_UNOPENED, TYPE_PLACED_CALL o
TYPE_RECEIVED_CALL.
int phoneType = phoneLog.getType();
111
Gua de desarrollo
2.
2.
2.
3.
112
Busque ControlledAccessException para obtener instancias en las que su aplicacin no tiene permiso para
acceder a la informacin de nmero de telfono.
Gua de desarrollo
2.
113
Gua de desarrollo
2.
net.rim.blackberry.api.phone.*;
net.rim.blackberry.api.phone.phonegui.*;
net.rim.device.api.system.*;
net.rim.device.api.ui.*;
net.rim.device.api.ui.component.*;
3.
Cree una clase que ample la clase AbstractPhoneListener. Cree a un constructor para esta nueva clase.
final class MyPhoneScreenContent extends AbstractPhoneListener
{
public MyPhoneScreenContent()
{
}
}
4.
114
Gua de desarrollo
5.
6.
7.
net.rim.blackberry.api.phone.*;
net.rim.blackberry.api.phone.phonegui.*;
net.rim.device.api.system.*;
net.rim.device.api.ui.*;
net.rim.device.api.ui.component.*;
final class MyPhoneScreen extends Application
115
Gua de desarrollo
public MyPhoneScreen()
{
Phone.addPhoneListener(new MyPhoneScreenContent());
}
public static void main(String[] args)
{
new MyPhoneScreen().enterEventDispatcher();
}
}
final class MyPhoneScreenContent extends AbstractPhoneListener
{
public MyPhoneScreenContent()
{
}
public void callIncoming(int callId)
{
ScreenModel screenModel = new ScreenModel(callId);
PhoneScreen phoneScreenPortrait =
screenModel.getPhoneScreen(PhoneScreen.PORTRAIT, PhoneScreen.INCOMING);
LabelField labelField1 = new LabelField("Hello")
{
public void paint(Graphics g)
{
g.setColor(Color.GREEN);
super.paint(g);
}
};
LabelField labelField2 = new LabelField(" to the World.")
{
public void paint(Graphics g)
{
g.setColor(Color.RED);
super.paint(g);
}
};
labelField1.setFont(phoneScreenPortrait.getCallerInfoFont());
labelField2.setFont(phoneScreenPortrait.getCallerInfoFont());
phoneScreenPortrait.add(labelField1);
phoneScreenPortrait.add(labelField2);
screenModel.sendAllDataToScreen();
}
}
116
Gua de desarrollo
Mtodo
callAnswered()
callWaiting()
Descripcin
Para mostrar contenido en la primera pantalla de llamada activa, anule
AbstractPhoneListener.callAnswered() y obtenga los objetos de
pantalla de llamada para la llamada activa. La aplicacin Telfono invoca
este mtodo cuando el usuario contesta la primera llamada. En dispositivos
que funcionan en una red GSM, la aplicacin Telfono invoca este mtodo
cuando el usuario contesta tanto la primera llamada como la segunda.
Para mostrar contenido en la segunda pantalla de llamada activa, anule
AbstractPhoneListener.callWaiting() y obtenga los objetos de
pantalla de llamada para la llamada activa. La aplicacin Telfono invoca
este mtodo cuando el usuario contesta la segunda llamada.
Ejemplo de cdigo: Visualizar el contenido en dispositivos que funcionan en una red CDMA
El ejemplo de cdigo siguiente demuestra cmo anular AbstractPhoneListener.callWaiting(). Puede
comprobar si el dispositivo opera en una red CDMA utilizando la clase RadioInfo. Obtiene las instancias de la
pantalla de llamada activa invocando ScreenModel.getPhoneScreen() y pasando PhoneScreen.ACTIVE de
forma que slo especifique el contenido de la segunda llamada.
public void callWaiting(int callId)
{
// For CDMA devices, specify the content for the active call screen
if((RadioInfo.getSupportedWAFs() & RadioInfo.WAF_CDMA) != 0)
{
ScreenModel screenModel = new ScreenModel(callId);
PhoneScreen phoneScreenPortrait =
screenModel.getPhoneScreen(PhoneScreen.PORTRAIT, PhoneScreen.ACTIVE);
PhoneScreen phoneScreenLandscape =
screenModel.getPhoneScreen(PhoneScreen.LANDSCAPE, PhoneScreen.ACTIVE);
}
// For GSM and CDMA devices, specify the content for the incoming call screen
}
117
Gua de desarrollo
BlackBerry Browser
BlackBerry Browser
11
El siguiente ejemplo crea un elemento del men que muestra una pgina Web en BlackBerry Browser.
private MenuItem browserItem =
new MenuItem(_resources.getString(MENUITEM_BROWSER), 110, 12)
{
public void run()
{
BrowserSession visit = Browser.getDefaultSession();
visit.displayPage("http://www.blackberry.com");
}
};
118
Gua de desarrollo
cargar y configurar los ajustes de visualizacin para contenido Web en objetos Field de cualquier aplicacin
acceda al DOM del contenido Web cargado
controle la gestin HTTP para conexiones, SSL, cookies y almacenamiento en cach
ajuste los servicios de escucha de devolucin de llamadas para controlar el progreso de carga de pginas Web
Puede crear aplicaciones que incluyan objetos Java y mtodos que puedan acceder e invocar cdigo JavaScript y
recibir acceso e invocacin del cdigo JavaScriptutilizando las API del paquete net.rim.device.api.script,
que es nuevo en BlackBerry JDE.
2.
Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase
nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor
de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase
BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication
{
public static void main(String[] args)
{
BrowserFieldDemo app = new BrowserFieldDemo();
app.enterEventDispatcher();
}
public BrowserFieldDemo()
{
pushScreen(new BrowserFieldDemoScreen());
}
}
3.
4.
119
Gua de desarrollo
5.
6.
2.
net.rim.device.api.browser.field2.*;
net.rim.device.api.system.*;
net.rim.device.api.ui.*;
net.rim.device.api.ui.container.*;
Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase
nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor
de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase
BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication
{
public static void main(String[] args)
{
BrowserFieldDemo app = new BrowserFieldDemo();
app.enterEventDispatcher();
}
public BrowserFieldDemo()
{
pushScreen(new BrowserFieldDemoScreen());
}
}
3.
4.
5.
120
Gua de desarrollo
6.
2.
net.rim.device.api.browser.field2.*;
net.rim.device.api.system.*;
net.rim.device.api.ui.*;
net.rim.device.api.ui.container.*;
Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase
nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor
de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase
BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication
{
public static void main(String[] args)
{
BrowserFieldDemo app = new BrowserFieldDemo();
app.enterEventDispatcher();
}
public BrowserFieldDemo()
{
pushScreen(new BrowserFieldDemoScreen());
}
}
3.
4.
5.
6.
121
Gua de desarrollo
Nota: La clase BrowserField no accede a los recursos utilizando una estructura de carpetas. La clase
BrowserField muestra el primer recurso encontrado que coincide con el nombre de archivo especificado.
2.
Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase
nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor
de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase
BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication
{
public static void main(String[] args)
{
BrowserFieldDemo app = new BrowserFieldDemo();
app.enterEventDispatcher();
}
public BrowserFieldDemo()
{
pushScreen(new BrowserFieldDemoScreen());
}
}
3.
4.
5.
6.
En el constructor de pantalla, cree una instancia de la clase BrowserField que utilice la configuracin que ha
definido.
BrowserField browserField = new BrowserField(myBrowserFieldConfig);
122
Gua de desarrollo
2.
net.rim.device.api.browser.field2.*;
net.rim.device.api.io.http.*;
net.rim.device.api.system.*;
net.rim.device.api.ui.*;
net.rim.device.api.ui.container.*;
java.lang.*;
java.util.*;
Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase
nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor
de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase
BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication
{
public static void main(String[] args)
{
BrowserFieldDemo app = new BrowserFieldDemo();
app.enterEventDispatcher();
}
public BrowserFieldDemo()
{
pushScreen(new BrowserFieldDemoScreen());
}
}
3.
4.
5.
6.
En el constructor de pantalla, cree un objeto String que contenga la direccin Web bsica de la pgina Web
a la que va a enviar los datos de formularios.
String baseURL = "http://www.blackberry.com";
7.
En el constructor de pantalla, cree un objeto String que especifique los datos de formularios que la aplicacin
enva a la pgina Web.
123
Gua de desarrollo
8.
En el constructor de pantalla, cree un objeto Hashtable para almacenar la informacin de encabezado para
los datos de formulario.
Hashtable header = new Hashtable();
9.
10. En el constructor de pantalla, invoque BrowserField.requestContent() para enviar los datos de formulario
a la pgina Web y mostrar la pgina Web.
browserField.requestContent(baseURL, postData.getBytes(), new
HttpHeaders(header));
124
Opciones de men
Gua de desarrollo
Opciones de men
12
2.
Para crear y registrar un elemento del men, realice las tareas siguientes:
Tarea
Definir un elemento del men
Pasos
Ample la clase ApplicationMenuItem.
public class SampleMenuItem extends
ApplicationMenuItem { ... }
Implemente toString().
Implemente run().
125
Gua de desarrollo
Tarea
Pasos
public Object run(Object context)
{
// the menu's action here
return null;
}
Invoque
ApplicationMenuItemRepository.addMenuItem().
ApplicationMenuItemRepository amir =
ApplicationMenuItemRepository.getInstance();
amir.addMenuItem(
ApplicationMenuItemRepository.MENUITEM_PHONE,
mySampleMenuItem);
Para obtener ms informacin, consulte la descripcin general de las categoras de integracin de aplicaciones en
la referencia de la API para BlackBerry Java Development Environment.
126
Gua de desarrollo
The Send Menu API allows your application to interact with other BlackBerry Device Software applications, such as
the Messages application and social networking applications, and makes it easy for users to navigate between
applications. By using the Send Menu API, you can create an application with a user experience that is consistent
with other core applications on the device.
You can use the Send Menu API to add a Send menu item to the menu of your application. When a user clicks the
Send menu item, a submenu appears with a list of applications that the user can use to send content from your
application to a recipient. When the user clicks the name of an application in the Send submenu, that application
opens with certain fields prepopulated with the content to send. For example, if the user chooses to send text
from your application by using an email message, the Messages application opens and the body of a new email
message is populated with the text. Only applications that are developed by Research In Motion can appear in the
Send menu of your application.
127
Gua de desarrollo
Description
This parameter is an int value that represents the type of content that your
application allows users to send using the Send menu. You can specify two
values for this parameter, both of which are constants that are included in
SendCommand:
context
availability
application allows users to send text, and that the context parameter
contains information that is related to the text to send.
SendCommand.TYPE_PATH: This constant indicates that your
application allows users to send files, and that the context parameter
contains information that is related to the file to send.
This parameter is a JSONObject object that represents the content to send.
This object contains a set of key-value pairs that determine what content
is sent and what fields are populated in the application that sends the
content. For example, the JSONObject object might contain the path of
the file to send, or the subject and body of a message to create. You can
use the constants that are included in the SendCommandContextKeys
class as keys for the content.
This parameter is a boolean value that indicates whether get() returns
all commands regardless of whether their associated applications can be
opened.
This parameter is optional.
128
Gua de desarrollo
The get() method returns SendCommand objects that support both the type and the context that you specify.
For example, if you specify a type of SendCommand.TYPE_PATH, the array of SendCommand objects that you
receive from get() will not include a command that is associated with sending an SMS text message because files
cannot be sent using SMS text messages.
You can use the following code snippet to retrieve a set of commands from a SendCommandRepository. These
commands are associated with applications that support sending text content to a recipient, such as the Messages
application, and do not include commands that are associated with applications that cannot be opened.
SendCommand[] sendCommands =
SendCommandRepository.getInstance().get(SendCommand.TYPE_TEXT, context, false);
net.rim.device.api.ui.Field;
net.rim.device.api.ui.XYEdges;
net.rim.device.api.ui.component.EditField;
net.rim.device.api.ui.component.Menu;
net.rim.device.api.ui.container.MainScreen;
net.rim.device.api.ui.decor.BorderFactory;
129
Gua de desarrollo
import org.json.me.JSONException;
import org.json.me.JSONObject;
2.
In the screen class, declare instance variables to represent an edit field and the text that the user types in this
field.
private EditField _textToSend;
private String _textString;
3.
In the screen constructor, create a new EditField object to represent the field that the user types in.
_textToSend = new EditField("Send: ", "Type the text to send here", 255,
Field.USE_ALL_WIDTH);
4.
To specify the appearance of the EditField object, invoke setBorder(), setPadding(), and
setMargin(). In this task, a bevel border is created for the EditField object, and a padding area and margin
area are added.
_textToSend.setBorder(BorderFactory.createBevelBorder(new XYEdges(3, 3, 3, 3)));
_textToSend.setPadding(8, 8, 8, 8);
_textToSend.setMargin(15, 15, 15, 15);
5.
6.
7.
Invoke super.makeMenu() to add the default menu items for BlackBerry device applications to the menu.
super.makeMenu(menu, instance);
8.
Invoke getText() of the EditField class to retrieve the text that the user typed in the edit field.
_textString = _textToSend.getText();
9.
Create a new JSONObject object to represent the context information for the Send menu.
JSONObject context = new JSONObject();
10. In a try/catch block, invoke put() of the JSONObject object to populate the context information using keyvalue pairs. Use the constants that are defined in the SendCommandContextKeys class as keys. Catch a
JSONException, which indicates that the specified key is null.
try
{
context.put(SendCommandContextKeys.TEXT, _textString);
context.put(SendCommandContextKeys.SUBJECT, "Your Text");
}
catch (JSONException e)
{
System.out.println(e.toString());
}
130
Gua de desarrollo
11. Create an array of SendCommand objects to represent the Send menu commands that you want to include in
the Send menu. Invoke SendCommandRepository.getInstance() to retrieve the singleton instance of the
SendCommandRepository. Invoke get() and specify as parameters the type of content to send, the context
information for the content, and a boolean value that indicates whether all of the commands should be
retrieved regardless of whether their associated applications can be opened.
SendCommand[] sendCommands = SendCommandRepository.getInstance().get(
SendCommand.TYPE_TEXT, context, false);
12. Determine whether the array of SendCommand objects is not null and contains commands, and if so, create a
new SendCommandMenu object to represent these commands and add it to the menu.
net.rim.device.api.ui.Field;
net.rim.device.api.ui.UiApplication;
net.rim.device.api.ui.XYEdges;
net.rim.device.api.ui.component.EditField;
net.rim.device.api.ui.component.Menu;
net.rim.device.api.ui.container.MainScreen;
net.rim.device.api.ui.decor.BorderFactory;
import org.json.me.JSONException;
import org.json.me.JSONObject;
public class SendMenuAPIDemo extends UiApplication
{
public static void main(String[] args)
{
SendMenuAPIDemo theApp = new SendMenuAPIDemo();
theApp.enterEventDispatcher();
}
public SendMenuAPIDemo()
{
pushScreen(new SendCommandDemoScreen());
}
131
Gua de desarrollo
add(_textToSend);
false);
132
Gua de desarrollo
You can invoke put() of the JSONObject class to add context information to a JSONObject. The Send Menu API
provides a set of predefined keys, which are constants in the SendCommandContextKeys class, that you can use
to add context information to a JSONObject.
The following code sample demonstrates how to create a JSONObject and add text to it using the
SendCommandContextKeys.TEXT key. The put() method can throw a JSONException to indicate that the key
that you specify is null, so it's important to catch this exception.
JSONObject context = new JSONObject();
try
{
context.put(SendCommandContextKeys.TEXT, "This is some text to send.");
}
catch (JSONException e)
{
System.out.println(e.toString());
}
SUBJECT
Description
You can use this constant as a key to store a String object that represents
a path. This path is the location of a file in the file system of the BlackBerry
device, such as /SDCard/photo.jpg. The file that this path refers to does not
need to exist on the device.
If a SendCommand object has a type of SendCommand.TYPE_PATH, then
this constant is required as a key in the associated JSONObject.
You can use this constant as a key to store a String object that represents
the subject of a message. For example, if your application allows a
BlackBerry device user to send text and the user chooses to send the text
in an email message, then the value that is associated with this key in the
JSONObject is used as the subject of the email message.
If a SendCommand object has a type of SendCommand.TYPE_TEXT, then
this constant is optional as a key in the associated JSONObject.
133
Gua de desarrollo
Constant
Description
You can use this constant as a key to store a String object that represents
the text of a message. For example, if your application allows a user to send
text and the user chooses to send the text in an email message, then the
value that is associated with this key in the JSONObject is used as the text
of the email message.
TEXT
2.
Override makeMenu() of the MainScreen class to create the menu for your application. Add the required code
to set up a Send menu, such as invoking super.makeMenu(), creating and populating a context object, and
retrieving a list of SendCommand objects.
protected void makeMenu(Menu menu, int instance)
{
super.makeMenu(menu, instance);
}
3.
Before you invoke add() to add the Send menu to the menu of your application, perform the following steps:
a.
134
Create a new object to represent a context filter. In this task, the MyContextFilter class is defined as a
context filter for SendCommand objects.
Gua de desarrollo
b.
4.
5.
Implement filterContext(). This method is invoked when a BlackBerry device user clicks a Send menu item
that has this context filter set.
public JSONObject filterContext(SendCommand sendCommand)
{
6.
Create a new JSONObject object. Invoke getContext() to retrieve the context object of the SendCommand
object that the user clicked, and store it in the JSONObject.
JSONObject newContext = sendCommand.getContext();
7.
In a try/catch block, alter the context object as appropriate. In this task, invoke put() of the JSONObject object
to replace the subject text in the JSONObject. Catch a JSONException, which indicates that the specified key
is null.
try
{
newContext.put(SendCommandContextKeys.SUBJECT,
"Subject replaced by filter");
}
catch (JSONException e)
{
System.out.println(e.toString());
}
net.rim.device.api.ui.Field;
net.rim.device.api.ui.UiApplication;
net.rim.device.api.ui.XYEdges;
net.rim.device.api.ui.component.EditField;
net.rim.device.api.ui.component.Menu;
net.rim.device.api.ui.container.MainScreen;
net.rim.device.api.ui.decor.BorderFactory;
import org.json.me.JSONException;
import org.json.me.JSONObject;
public class ContextFilterDemo extends UiApplication
135
Gua de desarrollo
add(_textToSend);
136
Gua de desarrollo
sendCommands[i].setSendCommandContextFilter(filter);
}
menu.add(new SendCommandMenu(sendCommands, 0, 0));
return newContext;
137
Gua de desarrollo
Obtener ms informacin
138
Obtener ms informacin
13
www.blackberry.com/go/apiref: vea la ltima versin de la referencia de la API para BlackBerry Java SDK.
www.blackberry.com/go/devguides: encuentre las guas de desarrollo, notas de la versin y las descripciones
generales de la aplicacin de ejemplo para BlackBerry Java SDK.
www.blackberry.com/go/uiguidelines: encuentre las directrices de IU para smartphones BlackBerry.
www.blackberry.com/developers: visite BlackBerry Developer Zone si desea conocer recursos sobre desarrollo
de aplicaciones de dispositivos BlackBerry.
www.blackberry.com/go/developerkb: consulte los artculos de la base de conocimientos en la Base de
conocimientos de desarrollo de BlackBerry.
www.blackberry.com/developers/downloads: encuentre las ltimas herramientas de desarrollo y descargas
para desarrollar aplicaciones de dispositivos BlackBerry.
Gua de desarrollo
Glosario
Glosario
14
API
Application Programming Interface (Interfaz de programacin de aplicaciones)
BCC (CCO)
blind carbon copy (copia oculta)
CC
carbon copy (copia)
CRM
Customer relationship management (Gestin de las relaciones con el cliente)
DTMF
Dual Tone Multi-Frequency (Multifrecuencia de doble tono)
JSR
Java Specification Request
MIME
Multipurpose Internet Mail Extensions (Extensiones multiuso del correo de Internet)
MEID
Mobile Equipment Identifier (Identificador de equipos mviles)
MMS
Multimedia Messaging Service (Servicio de mensajera multimedia)
PIM
personal information management (administracin de informacin personal)
PIN
personal identification number (nmero de identificacin personal)
SMS
Short Message Service (Servicio de mensajes cortos)
SVG
Scalable Vector Graphics (Grficos vectoriales escalables)
UCS
Universal Content Stream (Flujo de contenido universal)
139
Gua de desarrollo
UID
unique identifier (identificador nico)
UTF
UCS Transformation Format (Formato de transformacin UCS)
140
Glosario
Gua de desarrollo
Comentarios
Comentarios
15
141
Gua de desarrollo
16
Descripcin
Se cambiaron los temas siguientes:
10 de septiembre de 2010
142
Gua de desarrollo
Fecha
16 de agosto de 2010
Descripcin
Se aadi el tema siguiente:
Gua de desarrollo
Fecha
Descripcin
Bsqueda unificada
Actualizar una entrada del calendario sin ninguna notificacin
Utilizar otros motores de bsqueda
144
Gua de desarrollo
Aviso legal
Aviso legal
17
2011 Research In Motion Limited. Reservados todos los derechos. BlackBerry, RIM, Research In Motion y las
marcas comerciales, nombres y logotipos relacionados son propiedad de Research In Motion Limited y estn
registrados y/o se usan en EE. UU. y en diferentes pases del mundo.
Eclipse es una marca comercial de Eclipse Foundation, Inc. Google y YouTube son marcas comerciales de Google
Inc. Java y JavaScript son marcas comerciales de Oracle America, Inc. iCal es una marca comercial de Apple Inc.
vCard es una marca comercial de Internet Mail Consortium. Wi-Fi es una marca comercial de Wi-Fi Alliance.. Todas
las dems marcas comerciales son propiedad de sus respectivos propietarios.
Esta documentacin, incluida cualquier documentacin que se incorpore mediante referencia como documento
proporcionado o disponible en www.blackberry.com/go/docs, se proporciona o se pone a disposicin "TAL CUAL"
y "SEGN SU DISPONIBILIDAD" sin ninguna condicin, responsabilidad o garanta de ningn tipo por Research In
Motion Limited y sus empresas afiliadas ("RIM") y RIM no asume ninguna responsabilidad por los errores
tipogrficos, tcnicos o cualquier otra imprecisin, error u omisin contenidos en esta documentacin. Con el fin
de proteger la informacin confidencial y propia de RIM, as como los secretos comerciales, la presente
documentacin describe algunos aspectos de la tecnologa de RIM en lneas generales. RIM se reserva el derecho
a modificar peridicamente la informacin que contiene esta documentacin, si bien tampoco se compromete en
modo alguno a proporcionar cambios, actualizaciones, ampliaciones o cualquier otro tipo de informacin que se
pueda agregar a esta documentacin.
Esta documentacin puede contener referencias a fuentes de informacin, hardware o software, productos o
servicios, incluidos componentes y contenido como, por ejemplo, el contenido protegido por copyright y/o sitios
Web de terceros (conjuntamente, los "Productos y servicios de terceros"). RIM no controla ni es responsable de
ningn tipo de Productos y servicios de terceros, incluido, sin restricciones, el contenido, la exactitud, el
cumplimiento de copyright, la compatibilidad, el rendimiento, la honradez, la legalidad, la decencia, los vnculos o
cualquier otro aspecto de los Productos y servicios de terceros. La inclusin de una referencia a los Productos y
servicios de terceros en esta documentacin no implica que RIM se haga responsable de dichos Productos y
servicios de terceros o de dichos terceros en modo alguno.
EXCEPTO EN LA MEDIDA EN QUE LO PROHBA ESPECFICAMENTE LA LEY DE SU JURISDICCIN, QUEDAN EXCLUIDAS
POR LA PRESENTE TODAS LAS CONDICIONES, APROBACIONES O GARANTAS DE CUALQUIER TIPO, EXPLCITAS O
IMPLCITAS, INCLUIDA, SIN NINGN TIPO DE LIMITACIN, CUALQUIER CONDICIN, APROBACIN, GARANTA,
DECLARACIN DE GARANTA DE DURABILIDAD, IDONEIDAD PARA UN FIN O USO DETERMINADO,
COMERCIABILIDAD, CALIDAD COMERCIAL, ESTADO DE NO INFRACCIN, CALIDAD SATISFACTORIA O TITULARIDAD,
O QUE SE DERIVE DE UNA LEY O COSTUMBRE O UN CURSO DE LAS NEGOCIACIONES O USO DEL COMERCIO, O
RELACIONADO CON LA DOCUMENTACIN O SU USO O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER
SOFTWARE, HARDWARE, SERVICIO O CUALQUIER PRODUCTO O SERVICIO DE TERCEROS MENCIONADOS AQU.
TAMBIN PODRA TENER OTROS DERECHOS QUE VARAN SEGN EL ESTADO O PROVINCIA. ES POSIBLE QUE
ALGUNAS JURISDICCIONES NO PERMITAN LA EXCLUSIN O LA LIMITACIN DE GARANTAS IMPLCITAS Y
CONDICIONES. EN LA MEDIDA EN QUE LO PERMITA LA LEY, CUALQUIER GARANTA IMPLCITA O CONDICIONES EN
RELACIN CON LA DOCUMENTACIN NO SE PUEDEN EXCLUIR TAL Y COMO SE HA EXPUESTO ANTERIORMENTE,
PERO PUEDEN SER LIMITADAS, Y POR LA PRESENTE ESTN LIMITADAS A NOVENTA (90) DAS DESDE DE LA FECHA
QUE ADQUIRI LA DOCUMENTACIN O EL ELEMENTO QUE ES SUJETO DE LA RECLAMACIN.
145
Gua de desarrollo
Aviso legal
EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, EN NINGN CASO RIM ASUMIR
RESPONSABILIDAD ALGUNA POR CUALQUIER TIPO DE DAOS RELACIONADOS CON ESTA DOCUMENTACIN O SU
USO, O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER SOFTWARE, HARDWARE, SERVICIO O PRODUCTOS Y
SERVICIOS DE TERCEROS AQU MENCIONADOS INCLUIDOS SIN NINGN TIPO DE LIMITACIN CUALQUIERA DE LOS
SIGUIENTES DAOS: DIRECTOS, RESULTANTES, EJEMPLARES, INCIDENTALES, INDIRECTOS, ESPECIALES, PUNITIVOS
O AGRAVADOS, DAOS POR PRDIDA DE BENEFICIOS O INGRESOS, IMPOSIBILIDAD DE CONSEGUIR LOS AHORROS
ESPERADOS, INTERRUPCIN DE LA ACTIVIDAD COMERCIAL, PRDIDA DE INFORMACIN COMERCIAL, PRDIDA DE
LA OPORTUNIDAD DE NEGOCIO O CORRUPCIN O PRDIDA DE DATOS, IMPOSIBILIDAD DE TRANSMITIR O RECIBIR
CUALQUIER DATO, PROBLEMAS ASOCIADOS CON CUALQUIER APLICACIN QUE SE UTILICE JUNTO CON
PRODUCTOS Y SERVICIOS DE RIM, COSTES DEBIDOS AL TIEMPO DE INACTIVIDAD, PRDIDA DE USO DE LOS
PRODUCTOS Y SERVICIOS DE RIM O PARTE DE L O DE CUALQUIER SERVICIO DE USO, COSTE DE SERVICIOS
SUSTITUTIVOS, COSTES DE COBERTURA, INSTALACIONES O SERVICIOS, COSTE DEL CAPITAL O CUALQUIER OTRA
PRDIDA MONETARIA SIMILAR, TANTO SI DICHOS DAOS SE HAN PREVISTO O NO, Y AUNQUE SE HAYA AVISADO A
RIM DE LA POSIBILIDAD DE DICHOS DAOS.
EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, RIM NO TENDR NINGN OTRO TIPO
DE OBLIGACIN O RESPONSABILIDAD CONTRACTUAL, EXTRACONTRACTUAL O CUALQUIER OTRA, INCLUIDA
CUALQUIER RESPONSABILIDAD POR NEGLIGENCIA O RESPONSABILIDAD ESTRICTA.
LAS LIMITACIONES, EXCLUSIONES Y DESCARGOS DE RESPONSABILIDAD SE APLICARN: (A) INDEPENDIENTEMENTE
DE LA NATURALEZA DE LA CAUSA DE LA ACCIN, DEMANDA O ACCIN SUYA, INCLUIDA PERO NO LIMITADA AL
INCUMPLIMIENTO DEL CONTRATO, NEGLIGENCIA, AGRAVIO, EXTRACONTRACTUAL, RESPONSABILIDAD ESTRICTA
O CUALQUIER OTRA TEORA DEL DERECHO Y DEBERN SOBREVIVIR A UNO O MS INCUMPLIMIENTOS ESENCIALES
O AL INCUMPLIMIENTO DEL PROPSITO ESENCIAL DE ESTE CONTRATO O CUALQUIER SOLUCIN CONTENIDA
AQU; Y (B) A RIM Y A SUS EMPRESAS AFILIADAS, SUS SUCESORES, CESIONARIOS, AGENTES, PROVEEDORES
(INCLUIDOS LOS PROVEEDORES DE SERVICIOS DE USO), DISTRIBUIDORES AUTORIZADOS POR RIM (INCLUIDOS
TAMBIN LOS PROVEEDORES DE SERVICIOS DE USO) Y SUS RESPECTIVOS DIRECTORES, EMPLEADOS Y
CONTRATISTAS INDEPENDIENTES.
ADEMS DE LAS LIMITACIONES Y EXCLUSIONES MENCIONADAS ANTERIORMENTE, EN NINGN CASO NINGN
DIRECTOR, EMPLEADO, AGENTE, DISTRIBUIDOR, PROVEEDOR, CONTRATISTA INDEPENDIENTE DE RIM O
CUALQUIER AFILIADO DE RIM ASUMIR NINGUNA RESPONSABILIDAD DERIVADA DE O RELACIONADA CON LA
DOCUMENTACIN.
Antes de instalar, usar o suscribirse a cualquiera de los Productos y servicios de terceros, es su responsabilidad
asegurarse de que su proveedor de servicios de uso ofrezca compatibilidad con todas sus funciones. Puede que
algunos proveedores de servicios de uso no ofrezcan las funciones de exploracin de Internet con una suscripcin
al servicio BlackBerry Internet Service. Consulte con su proveedor de servicios acerca de la disponibilidad,
arreglos de itinerancia, planes de servicio y funciones. La instalacin o el uso de los Productos y servicios de
terceros con productos y servicios de RIM puede precisar la obtencin de una o ms patentes, marcas
comerciales, derechos de autor u otras licencias para evitar que se vulneren o violen derechos de terceros. Usted
es el nico responsable de determinar si desea utilizar Productos y servicios de terceros y si se necesita para ello
cualquier otra licencia de terceros. En caso de necesitarlas, usted es el nico responsable de su adquisicin. No
instale o utilice Productos y servicios de terceros hasta que se hayan adquirido todas las licencias necesarias.
Cualquier tipo de Productos y servicios de terceros que se proporcione con los productos y servicios de RIM se le
146
Gua de desarrollo
Aviso legal
facilita para su comodidad "TAL CUAL" sin ninguna condicin expresa e implcita, aprobacin, garanta de
cualquier tipo por RIM y RIM no sume ninguna responsabilidad en relacin con ello. El uso de los Productos y
servicios de terceros se regir y estar sujeto a la aceptacin de los trminos de licencias independientes
aplicables en este caso con terceros, excepto en los casos cubiertos expresamente por una licencia u otro acuerdo
con RIM.
Algunas funciones mencionadas en esta documentacin requieren una versin mnima del software de
BlackBerry Enterprise Server, BlackBerry Desktop Software y/o BlackBerry Device Software.
Los trminos de uso de cualquier producto o servicio de RIM se presentan en una licencia independiente o en otro
acuerdo con RIM que se aplica en este caso. NINGUNA PARTE DE LA PRESENTE DOCUMENTACIN EST PENSADA
PARA PREVALECER SOBRE CUALQUIER ACUERDO EXPRESO POR ESCRITO O GARANTA PROPORCIONADA POR RIM
PARA PARTES DE CUALQUIER PRODUCTO O SERVICIO DE RIM QUE NO SEA ESTA DOCUMENTACIN.
Research In Motion Limited
295 Phillip Street
Waterloo, ON N2L 3W8
Canad
Research In Motion UK Limited
Centrum House
36 Station Road
Egham, Surrey TW20 9LF
Reino Unido
Publicado en Canad
147