Boa tarde..
A partir de hoje estou começando uma série de Posts sobre programação Java ME para aparelhos BlackBerry utilizando as APIs da própria BlackBerry. No post de hoje vou falar de forma sucinta sobre as diferenças de programar somente com MIDP e utizando APIs BB, e também, introduzir a arqutetura utlizada no BlackBerry® Java Development Environment (JDE).
Pra início de conversa, segundo a documentação, “o BlackBerry® Java Development Environment (JDE) é projetado para fornecer um complete conjunto de APIs e ferramentas para você desenvolver aplicações Java™ que rodem em dispositivos BlackBerry”. Os dispositivos BlackBerry fornecem a configuração CLDC 1.1 e o perfil MIDP 2.0. O uso das APIs BlackBerry resulta em um melhor aproveitamento das capacidades do aparelho, porém, como consequência negativa, perdemos em portabilidade, isso porque, um programa feito pra BlackBerry com suas APIs só roda nestes aparelhos. Sendo assim, é necessário um bom estudo e levantamento de requisitos pra decidir utilzar o JDE. A imagem abaixo ilustra essa divisão

Apesar de acabar com a portabilidade, o uso da BlackBerry API fornece um leque maior de possiblidades para sua aplicação Java ME. A tabela abaixo mostra os pacotes da API:
| Pacote |
Descrição |
| net.rim.blackberry.api.browser |
Permite que as aplicações invoquem o browser BlackBerry. |
| net.rim.blackberry.api.invoke |
Permite invocar aplicativos BlackBerry, como tarefas, mensagens, memórias e telefone. |
| net.rim.blackberry.api.mail |
Define as funcionalidades necessárias para converter os components do sistema interno de mensagens RIM em objetos portáveis que são compatíveis com a mail API. Ele pemrite envio, recebimento e acesso as mensagens. |
| net.rim.blackberry.api.mail.event |
Define eventos de mensagem e interfaces listener para gerenciar estes eventos. |
| net.rim.blackberry.api.menuitem |
Permite que as aplicações adicionem menu items customizados para as aplicações BlackBerry, como um address book, calendar e messages. |
| net.rim.blackberry.api.options |
Permite que as aplicações adicionem itens para as opções do dispositivo BlackBerry |
| net.rim.blackberry.api.pdap |
Permite que as aplicações interajam com aplicativos BlackBerry personal information management (PIM), incluindo address book, tasks e calendar. |
| net.rim.blackberry.api.phone |
Fornece acesso para características avançadas do aplicativo telefone. |
| net.rim.blackberry.api.phone.phonelogs |
Fornece acesso ao histórico de chamadas. |
| net.rim.device.api.bluetooth |
Pemrite que aplicativos BlackBerry se comuniquem com a tecnologia Bluetooth®. |
| net.rim.device.api.browser.field |
Permite que as aplicações mostrem browser fields na interface de usuário. |
| net.rim.device.api.browser.plugin |
Permite que as aplicações adicionem suporte para tipos MIME adicionais para o BlackBerry Browser. |
| net.rim.device.api.collection e net.rim.device.api.collection.util |
Define interfaces e classe utilitárias para gerenciamento de coleção de dados. |
| net.rim.device.api.compress |
Este pacote fornece utilitários para compressão de dados, no formato GZip e Zlib. |
| net.rim.device.api.i18n |
Fornece classes para suportam a localização de aplicativos nos dispositivos BlackBerry |
| net.rim.device.api.io |
Fornece uma biblioteca de classes BlackBerry para gerenciamento da entrada e saída de dados. |
| net.rim.device.api.io |
Fornece uma biblioteca de classes BlackBerry para gerenciamento da entrada e saída de dados. |
| net.rim.device.api.notification |
Fornece métodos para notificação de eventos e resposta no lado do sistema e eventos específicos de aplicativos. |
| net.rim.device.api.servicebook |
Pemrite que aplicativos adicionem, deletem e acessem entradas do service book entries. |
| net.rim.device.api.system |
Fornece acesso para funcionalidades no nível de sistemay, incluindo event listeners para o teclado e trackwheel, image creation and support, and application control. |
| net.rim.device.api.ui |
Fornece funcionalidades para controle da interface de usuário, incluindo screen e gerenciadores de layout de campos, field type support, and focus, scroll, and change listeners. |
| net.rim.device.api.ui.component |
This package provides a library of interface components for creating UI applications. |
| net.rim.device.api.ui.container |
This package provides a library of interface manager components for creating UI applications. |
| net.rim.device.api.ui.text |
This package provides classes to filter text strings containing various types of data, such as phone numbers or URLs. |
| net.rim.device.api.util |
This package provides utility methods and interfaces, including classes for arrays, hash tables, and string matching. |
Acho que o leitor pode perceber o que pode fazer com a BlackBerry API que não poderia com a MIDP.
Um ponto crucial na programação para BlackBerry é a utilização de um arquivo .cod e não um arquivo .jar ou .jad, utilizado em outros equipamentos MIDP-Enabled. Nos próximos posts iremos tratar da geração deste arquivo. Existe também uma mudança significativa na pré-verififcação dos aplicativos. Segundo a documentação: O BlackBerry JDE usa um arquitetura VM separada, como descrito na especificação da CLDC. Para reduzir a quantidade de memória e poder de processamento que o dispositivo BlackBerry exige, parte do processo de carregamento de classes, chamado pré-verificação, ocorre antes do código Java ser carregado para o dispositivo BlackBerry. O BlackBerry IDE pré-verifica os fontes automaticamente antes de empacota-los dentro de um arquivo .cod. A VM realiza o resto da verificação durante o carregamento de classes em dispositivos BlackBerry.
Para persistência de objetos, a API fornece um modelo de persistência específico, permitindo uma nova forma de persistência além do RMS e seus frameworks. Quanto a conectividade, a BlackBerry JDE fornece as seguintes opções:
•stream connections (StreamConnection interface), including:
•HTTP connections (HttpConnection interface)
•HTTPS connections (HttpsConnection interface)
•socket connections (SocketConnection interface)
•secure socket connections (SecureConnection interface)
•serial connections to a communication port on the BlackBerry device (CommConnection interface)
•datagram connections (DatagramConnection interface), including:
•UDP datagram connections (UDPDatagramConnection interface)
Além do PushRegistry.
Duas características de grande ajuda para programadores são em relação as Collections e Vector´s. O pacote net.rim.device.api.collection inclui interfaces que definem vários tipos de coleções, como listas, sets, and maps, para tipos de dados específicos. Estas interfaces definem capacidades similares as interfaces List, Set, and Map na Java SE Collections Framework. Já a classe java.util.Vector implementa um vetor de objetos redimensionável. A BlackBerry JDE também fornece classes de conveniência, como um net.rim.device.api.util.IntVector e net.rim.device.api.util.ByteVector para trabalhar com arrays de tipos primitivos. Para grandes arrays de dados (mais que 10 ou 15 KB), a BlackBerry JDE fornece as classes BigVector, BigLongVector e BigIntVector no net.rim.device.api.collection.util. A BlackBerry também fornece a classe net.rim.device.api.collection.util.LongHashtableCollection, tornando possível o uso de HashTables em Java ME.
Quando aos listener´s disponíveis na API, o programador pode usufruir das seguintes opções: AlertListener, BluetoothSerialPortListener, GlobalEventListener, HolsterListener, IOPortListener, KeyListener, RealTimeClockListener, SerialPortListener, SystemListener, TrackwheelListener, USBPortListener. Pessoalmente fiquei admirado com as últimas três. O SystemListener, por exemplo, permite adicionar listener´s para eventos do sistema, como carga da bateria, status etc. Com ela, podemos ter um caso de uso assim: o aplicativo pode ser avisado quando a bateria apresentar menos de 10% de capacidade, avisando o usuário e salvando os estados mais importantes.
Outra classe muito útil é a Memory, que pode fornecer informações sobre espaço disponível para armazenamento e outros detalhes sobre a memória.
Acho que deu para perceber o poder que a BlackBerry JDE dá ao programador, claro, tem o ponto negativo de perda de portabilidade. Porém, se sua empresa trabalhará com sistemas direcionados exclusivamente a aparelhos BlackBerry´s, o uso desta API é uma boa pedida.
No próximo post vamos começar a trabalhar com o ambiente de desenvolvimento JDE. Até lá..
Att.
Ping