1) O documento explica como criar itens de menu em aplicativos nativos do BlackBerry, como calendário, alarmes e email, usando a API BlackBerry.
2) É mostrado como estender a classe ApplicationMenuItem e implementar os métodos run() e toString() para criar os itens de menu.
3) Os itens de menu criados permitem compartilhar eventos do calendário com contatos ou ver detalhes de alarmes e mensagens de email.
A hora de criar LBS para pequenos dispositivos é agora!!
Criando itens de menu em aplicativos nativos com a BlackBerry API
1. Criando itens de menu em aplicativos nativos com a BlackBerry API Boa tarde... Primeiramente, gostaria de falar que este post foi inspirado no texto “Crie Aplicativos BlackBerry com Ferramentas de Software Livre, Parte 3: Construindo um Aplicativo de Redes de Relacionamentos”. Ele mostra como criar um aplicativo que insere um menu item no aplicativo de tarefas do BlackBerry, permitindo que uma tarefa seja enviada para um contato do device. Bem, a idéia aqui é demonstrar como podemos criar um item de menu em aplicativos nativos do aparelho. Vamos criar um aplicativo que vai interferir em três aplicações nativas: despertador, calendário e visualização de email. O primeiro passo é criar uma aplicação BlackBerry básica. Nos tutoriais anteriores criados pelo Mobilidade é Tudo, sempre criamos classes que extendiam de UiApplication. Desta vez, extendemos apenas de Application. Porque isso, porque nossa aplicação não terá interface gráfica, será apenas uma aplicação sem interação direta com o usuário. Veja como fica nossa classe principal na Listagem 1: Listagem 1 0: import net.rim.device.api.system.Application; 1: import net.rim.blackberry.api.menuitem.*; 2: class Principal extends Application 3: { 4: public static void main(String[] args) 5: { 6: Principal theApp = new Principal (); 7: } 8: 9: public Principal () 10: { 11: ApplicationMenuItemRepository.getInstance().addMenuItem (ApplicationMenuItemRepository.MENUITEM_CALENDAR, new CalendarMenus(0,
Compartilhar evento
)); 12: 13:ApplicationMenuItemRepository.getInstance().addMenuItem (ApplicationMenuItemRepository.MENUITEM_EMAIL_VIEW, new MenuItemEV(0)); 14: 15:ApplicationMenuItemRepository.getInstance().addMenuItem (ApplicationMenuItemRepository.MENUITEM_ALARM, new MenuItemDesp()); 16: } 17: } Veja na linha 2 a palavra extends seguida da classe Application. No método main (linha 4) apenas chamamos o construtor da classe. Aqui começa nossa brincadeira. Para inserir um item de menu em aplicativos nativos usamos uma instância da classe ApplicationMenuItemRepository, e, seu método addMenuItem(). Perceba que criamos uma instância da classe sem a palavra reservada nem, mas sim, com o uso do método getInstance(). Para o método addMenuItem devemos passar dois, três ou quatro parâmetros. Neste tutorial porém, vamos trabalhar com apenas dois construtores. O primeiro representa um número long que identifica o aplicativo onde o item do menu será inserido. A classe ApplicationMenuItemRepository jê tem algumas ocnstantes que representam estes valores. No exemplo usamos 3: MENUITEM_CALENDAR, MENUITEM_EMAIL_VIEW e MENUITEM_ALARM. Consulte a documentação da classe para ver todas as constantes. O segundo parâmetro do método representa uma classe que seja uma ApplicationMenuItem, o caso mais conhecido é a herança. Ou seja, qualquer classe que herde de ApplicationMenuItem. Além disso, a classe deve seguir um contrato, implementando alguns métodos. Esses métodos são: Object run(Object context) e String toString(). Por exemplo, volte à primeira listagem de código, veja a linha 11. Passamos como segundo parâmetro uma instância da classe CalendarMenus. Veja na Listagem 2: Listagem 2 01: import javax.microedition.pim.Contact; 02: import javax.microedition.pim.Event; 03: import javax.microedition.pim.PIM; 04: import net.rim.blackberry.api.menuitem.ApplicationMenuItem; 05: import net.rim.blackberry.api.pdap.BlackBerryContactList; 06: import net.rim.device.api.ui.component.Dialog; 07: 08: class CalendarMenus extends ApplicationMenuItem { 09: String myname; 10: CalendarMenus(int order,String name) 11: { 12: super(order); 13: myname = name; 14: } 15: 16: public Object run(Object context) 17: { 18: if (context instanceof Event) 19: { 20: try 21: { 22: Event evt = (Event) context; 23: handleCalendarEvent(evt); 24: } 25: catch (Exception ex) 26: { 27: ex.printStackTrace(); 28: } 29: 30: } 31: return context; 32: } 33: 34: public String toString(){ 35: return myname; 36: } 37: 38: public void handleCalendarEvent(Event e) 39: { 40: try 41: { 42: net.rim.blackberry.api.pdap.BlackBerryContactList contactList = (BlackBerryContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY); 43: Contact c = contactList.choose(null,BlackBerryContactList.AddressTypes.EMAIL,false); 44: if (c == null) 45: { 46: Dialog.alert(
escolha um contato
); 47: } 48: else 49: { 50: String emailAddress = c.getString(Contact.EMAIL,0); 51: String[] nameFragments = c.getStringArray(Contact.NAME, 0); 52: String eventData = nameFragments[1]+
+nameFragments[0]+
, você foi convidado para:
; 53: eventData+=
Oque?:
+e.getString(Event.SUMMARY,0)+
; 54: eventData+=
Onde:
+e.getString(Event.LOCATION,0)+
; 55: eventData+=
Quando:
+new java.util.Date(e.getDate(Event.START,0)).toString() +
until
+ new java.util.Date(e.getDate(Event.END,0)).toString() +
; 56: 57: Dialog.alert(eventData); 58: } 59: 60: } 61: catch (Exception ee) 62: { 63: System.err.println(ee.getMessage()); 64: ee.printStackTrace(); 65: } 66: } 67: } Na última listagem sobrescrevemos os métodos necessários para termos um item de menu válido. O método toString() serve para informar qual o rótulo que o item mostrará no display. Logo, na linha 35 apenas retornamos a string recebida por parâmetro no construtor da classe (linha 13). O método run, na linha 16, é a ação que será executada quando o nosso item for acionado. No nosso exemplo vamos mostrar os detalhes da tarefa em um Dialog. Então, na primeira linha do run (linha 18), verificamos se contexto que chamou a ação é mesmo uma instância da classe Event. Caso afirmativo, apenas chamamos o método handleCalendarEvent. No método handleCalendarEvent, criamos uma instância da classe BlackBerryContactList, que, segundo a própria documentação da RIM, contém a implementação de uma lista de contatos (classe ContactList) especifica para BlackBerry (linha 42). Na linha seguinte esperamos pela escolha do usuário para criar a instância de um objeto Contact. Ao selecionar um contato passaremos pelo teste se da linha 44. Nas linhas 50 e 51 recuperamos o email e o nome do contato selecionado. Aliás, esse assunto já é relacionado a PIM API do Java ME, que permite que você veja a agenda e lista de tarefas do device, por exemplo. Seguindo, das linhas 75 até a 79 montamos uma String, acessando campos do evento através de constantes da casse EVENT. Na linha 81 nós mostramos a mensagem em um Dialog. Vamos ver em imagem oque construímos aqui. Na Figura 1 apresentamos o aplicativo de tarefas nativa do BlackBerry. Na listagem 2 mostramos o mesmo aplicativo com o nosso menu item. Na Figura 3 podemos ver oque a classe BlackBerryContactList faz. E, por fim, a Figura 4 mostra a mensagem que construímos acessando os campos das classes Event e Contact. Figura 1: Aplicativo de tarefas nativa do dispositivo. Figura 2: Aplicativo de tarefa com nosso menu item. Figura 3: lista de contatos. Figura 4: mensagem entregue pelo aplicativo. Assim como criamos um menu item para o aplicativo de tarefa, podemos inserir itens em diversos aplicativos nativos. Por exemplo, veja a Figura 5 e 6, que inserem itens nos aplicativos de despertador e visualizador de email do BlackBerry. Figura 4: aplicativo nativo de despertador com o nosso item de menu “Alarme do Ping”. Figura 4: aplicativo nativo de leitura de email com o nosso menu item “Ver mensagem Out”.