Componentes Canvas - Um botão tocável em JME usando Canvas

nokia_touch.jpgEnsinarei como criar um componente reutilizável em Canvas. Criaremos um botão tocável, que você poderá usar em qualquer tela Canvas em JME. Esse botão só deve ser usado em devices Touch Screen.

O funcionamento se dará da seguinte forma. Criaremos uma classe chamada ImageButtom que representará o botão em si. Ele será eficiente de tal forma que será capaz de se pintar na tela Canvas em que ele estiver, e de disparar eventos quando ele for tocado.

Ele pintará uma imagem de fundo, com o design de um botão. Essa imagem poderá ser carregada por ele mesmo, ou poderá ser passada como parâmetro para ele usar. No construtor do botão poderemos informar então o caminho da imagem que ele deve carregar, ou passaremos a imagem diretamente, já carregada, para ele usar. Qual a diferença? Bem, se temos 2 ou mais botões em uma mesma tela, devemos carregar a imagem apenas uma vez em memória e passá-la aos 2 botões. Assim teremos 2 botões usando a mesma imagem em memória. Se passássemos o caminho da imagem para os 2 botões, cada um carregaria a imagem uma vez na memória, desperdiçando memória. Devemos passar o caminho da imagem para o botão apenas quando teremos apenas 1 botão na tela.

Além da imagem, o construtor deverá pedir pela posição X e Y em que o botão deve ser pintado na tela, bem como o label ou texto que deve ser escrito no centro do botão.

Evento de Toque

Como o botão saberá que ele foi tocado? Bem, quando uma tela Canvas é tocada, é chamado o método pointerReleased(x,y) que tem como parâmetros a posição do toque. Isso acontece em toda tela Canvas naturalmente. Precisaremos apenas sobrescrever esse método da tela Canvas e verificar em qual botão da tela o toque aconteceu. Exemplo:

    protected void pointerReleased(int x, int y) {
        //Verifica se o primeiro botão Alerta foi tocado
        if (botaoAlerta.isTouched(x, y))
            return;

        //Verifica se o primeiro botão Sair foi tocado
        if (botaoSair.isTouched(x, y))
            return;
    }

Ler a continuação desse artigo…

Criando uma base de dados para sistemas móveis


Salve leitores do Devmobile, nesse tutorial iremos falar um pouco sobre como criar uma base de dados para seu sistema móvel.

 

Antes de irmos para a prática, vamos saber sobre o SSCE – SQL Server Compact Edition.

Alguns pontos importantes:

   - Pode-se perceber que o próprio nome diz ser uma versão compacta do SQL Server;

   - O SSCE pode atingir um tamanho máximo de 4 GB de dados, possuindo total compatibilidade com ADO.NET, Transact SQL, oferece grandes facilidades de sincronização entre cliente e servidor;

   - Total integridade com suporte a DELETE’s e UPDATE’s;

   - Arquivos de dados protegidos com senha e criptografia de 128 bits;

   - Suporte a transações, permitindo Rollback e Commit;

   - Grande número de funções, como: SUM, AVG, COUNT, INNER JOIN, RIGTH JOIN E INNER JOIN, SUBSELECT, GROUP BY, HANVING;

   - Cursores de dados.

 

Com isso temos uma importante forma de guardar os dados de nossas aplicações no próprio aparelho móvel.

Podendo inserir, alterar, excluir informações no sistema móvel e no fim do trabalho podendo sincronizar os dados para o servidor web.

  Ler a continuação desse artigo…

Executando Thread - Windows Mobile

Nesse tutorial vou ensinar como criar, executar e parar uma Thread para que você utilize em sua aplicação, abaixo um simples entendimento sobre Thread.

Thread é utilizada para criar uma ou várias operações concorrentemente ou simultaneamente através das chamadas “Linhas de execução”.

Quando sua aplicação está sendo feita uma conexão onde ela está recebendo dados e você decide ao mesmo tempo fazer algum processo ou tarefa (como mensagens ao usuário, fazer uma nova conexão ou outro processo que deseja fazer) utilizamos o conceito de Thread.

Vamos fazer uma aplicação onde teremos um menu com 2 opções, sair da aplicação e ativar a thread. Depois de ativar a thread teremos um campo Text para digitarmos algo enquanto a Thread é executada.

Ler a continuação desse artigo…

Arquivo .CAB para aplicações Windows Mobile

Neste tutorial ensinarei como criar o arquivo de instalação de uma aplicação Windows Mobile. Bastante simples…

  Ler a continuação desse artigo…

System.Drawing - O Canvas do Windows Mobile


Neste artigo vamos aprender algumas funcionalidades de System.Drawing, sendo que vamos ver mais a parte de como programar utilizando as classes desse namespace, que podemos utilizar para fazer gráficos, escrever textos, imagens e muitas outras funcionalidades.

Para os desenvolvedores Java (J2ME), o System.Drawing é o Canvas para o Windows Mobile.

  Ler a continuação desse artigo…

Sua aplicação BlackBerry iniciando automaticamente no boot

Em algumas situações é necessário que sua aplicação seja iniciada automaticamente durante o boot. Para fazer isso é muito simples, basta adicionar ao seu JAD um parâmetro de flags que o BlackBerry usa, com valor 1.

Manifest-Version: 1.0
RIM-COD-Module-Name: xxxxxxxxx
RIM-COD-Module-Dependencies: net_rim_cldc,net_rim_os
MIDlet-Permissions: xxxxxxxxx
MicroEdition-Profile: MIDP-2.0
RIM-MIDlet-Flags-1: 1

Feito isso, sua aplicação será iniciada automaticamente quando for instalada, e também quando der um boot no aparelho. Ela será iniciada em background, ou seja, embora você instancie telas, elas não serão mostradas. Quando o usuário entrar na aplicação ela será colocada em foreground, e aí sim ele verá as telas. Se ao iniciar a aplicação, no boot, você já quiser que o usuário veja a tela, se quiser que a aplicação já inicie em foreground, basta chamar o método requestForeground() do seu objeto UiApplication.

Você ainda pode definir outros valores para a flag, veja a baixo:

RIM-MIDlet-Flags-1: 0 //Normal application
RIM-MIDlet-Flags-1: 1 //Auto-Startup
RIM-MIDlet-Flags-1: 2 //System Module
RIM-MIDlet-Flags-1: 3 //System Module & Auto-Startup

Framework para gerar aplicações multiplataforma JME e nativas BlackBerry sem saber JME nem BlackBerry

Julien - Framework para gerar aplicações multiplataforma JME e BlackBerry em saber JME nem BlackBerryAqui na empresa, todas as aplicações são feitas em Canvas para melhor qualidade visual. A maioria de nossas aplicações devem rodar em JME e nativamente em BlackBerry. Aplicações BlackBerry usam APIs da própria RIM, embora as aplicações nativas BlackBerry suportem a maioria das APIs JME. Quando se desenvolve aplicações BlackBerry, as telas e uso de classes para controle de interface gráfica são bem diferentes da API do JME. Normalmente, se quiser ter a mesma aplicação JME rodando nativamente em BlackBerry deve-se criar um novo projeto, refazendo cerca de 80% da aplicação.

Visto que aqui na empresa, normalmente, as mesmas aplicações JME devem também rodar nativamente em BlackBerry, iniciei há um ano o desenvolvimento do Julien, um framework para desenvolvimento de aplicações multiplataforma. Implementei no Julien classes específicas para interface gráfica, imagens, fontes, controles gráficos, requisições HTTP, persistência, etc. Toda a interface gráfica do Julien é feita em Canvas puro, cada controle gráfico como listas, combobox, caixas de texto, checklist, botões, menus, caixas de diálogos, etc, foi desenhado na mão, e está pronto e disponível para o desenvolvedor simplesmente usar em suas telas.

Ler a continuação desse artigo…

Exemplo Completo e Simples de Conexão HTTP em JME

Já havia feito um post, há alguns meses, mostrando como fazer conexões HTTP em JME de forma bastante completa. Mas em muitos casos as pessoas só querem aprender o conceito, como fazer de forma simples. Abaixo segue 2 classes, a classe do MIDlet e a classe do Form. O Form mostra um comando para iniciar a conexão e a conexão é feita, mostrando um log da conexão na tela, e a resposta do servidor na tela.

Ler a continuação desse artigo…

Como fazer sua aplicação agendar um compromisso abrindo o Calendário BlackBerry

blackberry_agenda.jpgCitei nos posts passados como integrar sua aplicação com o SO BlackBerry, fazendo com que sua aplicação inicie chamadas, envie e-mails e SMS. Agora vou mostrar como é fácil fazer com que sua aplicação marque um compromisso para o usuário, na agenda/calendário do BlackBerry.

Isso pode ser muito útil em aplicações comerciais. Por exemplo, imagine que sua aplicação tenha uma tela com o cadastro do cliente, com nome, telefone, endereço, informações sobre a conta, etc. Se o usuário quisesse agendar um compromisso, ele deveria sair da sua aplicação, iniciar o calendário, criar um novo compromisso, digitar demoradamente cada ítem do compromisso. Isso é até desanimador, e acaba desestimulando o uso da agenda. Com este recurso você adiciona um ítem de menu na tela de cliente de sua aplicação chamado “Agendar Compromisso”. Quando o usuário clica nesse ítem, abre a agenda do BlackBerry com o novo ítem já criado, com as informações já preenchidas do Nome do Cliente, Local, Anotações sobre o cliente, título do compromisso, e tudo maisque você julgar necessário.

Exemplo:

Colocar na sessão de IMPORTS:

import javax.microedition.pim.Event;
import javax.microedition.pim.EventList;
import javax.microedition.pim.PIM;
import net.rim.blackberry.api.invoke.CalendarArguments;
import net.rim.blackberry.api.invoke.Invoke;

Método de Exemplo:

public void marcarCompromisso(String titulo, String local, String notas) {
    try {
        Event e = null;
        EventList el = (EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
        e = el.createEvent();
        e.addString(Event.SUMMARY, 0, titulo);
        e.addString(Event.LOCATION, 0, local);
        e.addString(Event.NOTE, 0, notas);
        long start = System.currentTimeMillis() + 86400000;
        e.addDate(Event.START, 0, start);
        e.addDate(Event.END, 0, start + 3600000);
        Invoke.invokeApplication(Invoke.APP_TYPE_CALENDAR, new CalendarArguments(CalendarArguments.ARG_NEW, e));
    } catch (Exception e) {
        Invoke.invokeApplication(Invoke.APP_TYPE_CALENDAR, new CalendarArguments(CalendarArguments.ARG_NEW));
    }
} 

Bons códigos!

Python for S60 no Nokia Code Camp - Rio

nokia-e71-grey-steel.jpgParticipei do Nokia Code Camp aqui no Rio, hoje, na sessão de Python for S60.

Foi muito proveitoso. Os participantes conseguiram desenvolver aplicações muito legais em apenas 5 horas! Mesmo sem nunca terem mexido com Python, em sua maioria. Vou citar as aplicações que foram desenvolvidas:

1- Messenger via bluetooth, com recurso de envio de fotos tiradas na hora, e envio de mensagens de voz.

2- Reconhecimento de placa de automóveis por meio de fotos tiradas da câmera.

3- Reconhecimento geométrico à partir de imagens. Enquanto se mirava a câmera do celular numa caneta, o Python fazia o reconhecimento da imagem e identificava a localização da ponta da caneta em tempo real.

4- Facilitadores de uso de telefone para idosos e crianças. Foi desenvolvida uma aplicação integrada à API de telefonia, de forma que o usuário podia iniciar e controlar ligações apenas com movimentos, sem ter que ficar olhando pra tela.

5- Software alarme anti-furto de celular. Se você tocasse num celular com o alarme ativo, ele disparava som de alarme, e a tela/teclado de todo o aparelho ficavam travados. Só tirando a bateria ou jogando na água que o bicho parava! O dono do celular para desligar o alarme simplesmente fazia um movimento previamente programado com o celular e o alarme parava.

6- Vizualizador de fotos grandes com recurso de controlar o scroll da foto virando levemente o celular.

7- Controlador de perfil do aparelho (silencioso, externo, reunião, etc) de acordo com a identificação da antena de telefonia. Por exemplo, quando o usuário está em casa, usando uma determinada antena, ele automaticamente configura o perfil para Normal. Quando está na igreja, silencioso, etc.

Interessante que todas essas aplicações foram feitas em poucas horas. Claro que não foram aplicações plenamente prontas, mas todas estavam funcionais. Claro que com um bug ou outro, normal por se tratar de tão pouco tempo.

O Daniel Rocha mandou muito bem ajudando o pessoal e coordenando o campeonato de Python.

Abraço,

Como usar a API do Acelerômetro no BlackBerry Storm?

bbstorm1.jpgO uso de acelerômetro abre muitas possibilidades legais de desenvolvimento, e agora que o novíssimo BlackBerry Storm possui esse recurso, vale a pena explorá-lo.

Para usar o acelerômetro no BlackBerry Storm você precisa desenvolver usando API nativa, 4.7 ou superior.

É muito simples de usar. Basta que você leia as posições XYZ do acelerômetro, indicando um vetor short para que a API escreva nesse vetor as três posições.

Veja como é fácil:

public short[] leAcelerometro() {
    short[] xyz = new short[3];
    canal.getLastAccelerationData(xyz);
    return xyz;
}

O método acima retorna um vetor com as posições XYZ do acelerômetro.

No entanto, antes de ler o acelerômetro, é necessário abrir um canal com o hardware dele, e fechá-lo quando não for mais necessário fazer leitura do acelerômetro. Você só deve abrir o canal quando realmente for iniciar o uso do acelerômetro, fazendo várias leituras seguidas.

Ler a continuação desse artigo…

Ferramentas de desenvolvimento para BlackBerry Storm, Bold e Pearl Flip

bbstorm.jpgPara os que desejam desenvolver para BlackBerry aproveitando os novos recursos dos novíssimos modelos BlackBerry Storm, Bold e Pearl Flip, a Rim já disponibilizou para download free a nova JDE v4.7 (beta) e novos emuladores para os modelos.

A nova JDE já inclui o emulador para o BlackBerry Storm. É só baixar, integrar ao Netbeans, e desenvolver!

Entre os novos recursos e APIs, pode-se citar:

- Suporte a Touch-Screen em suas aplicações.
- Suporte a orientação (bússola) e rotacionamento automático da tela.
- Suporte a acelerômetro.
- API para controle do teclado virtual.
- Permite que sua aplicação defina o papel de parede do Blackberry.
- Vários novos recursos para controle multimídia.

Ler a continuação desse artigo…

Fazer Chamadas, Enviar E-Mail e SMS em BlackBerry

Os devices BlackBerry possuem ricas API para acesso ao sistema do celular. É muito fácil enviar um e-mail, iniciar uma chamada, ou enviar um SMS de dentro da sua aplicação. No entanto, o comum a fazer quando se deseja fazer alguma dessas coisas, é fazer a sua aplicação abrir o programa do sistema BlackBerry responsável, passando os parâmetros necessários, e deixar que o usuário faça o que deseja usando o programa do celular.

Por exemplo, digamos que você queira que sua aplicação envie e-mail. Sua aplicação chamará o programa do BlackBerry responsável por e-mails, passando o endereço de e-mail, o título do e-mail, entre outras coisas. Então o usuário continuará a enviar o e-mail por usando o programa do BlackBerry. Após fechar o programa de e-mail, o usuário voltará à sua aplicação automaticamente.

Mostro abaixo 2 métodos básicos para enviar e-mail.Você pode explorar ainda mais as classes Invoke e ApplicationArguments, que são os argumentos para cada programa.

void doCall(String numero) {
    Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, new PhoneArguments(PhoneArguments.ARG_CALL, numero));
}
    
static void doEmail(String para, String titulo, String mensagem) {
    Invoke.invokeApplication(Invoke.APP_TYPE_MESSAGES, new MessageArguments(MessageArguments.ARG_NEW, para, titulo, mensagem));
} 

Abraço.

Lista de Celulares por APIs Suportadas

As vezes precisamos saber se determinado celular suporta uma determinada JSR, por exemplo a JSR-82 (Bluetooth), ou saber todos os celulares que suportam uma determinada JSR. Ou mesmo saber quais celulares suportam MIDP 2.0.

Para isso a Sun compilou uma lista dos celulares por JSR. Basta clicar numa JSR e ver os celulares que a suportam.

http://developers.sun.com/mobility/device/device

Espero que seja útil.

Abraço.

Pegar endereço de e-mail BES ou BIS do usuário em BlackBerry

Precisei recentemente pegar informações do e-mail do usuário, num smartphone BlackBerry. Vou compartilhar com a comunidade.

Basta usar a classe Session, e pegar o objeto que guarda todas as configurações do e-mail do usuário que é uma instância da classe ServiceConfiguration.

Veja um exemplo rápido:

public String getEmail() {
    Session s = Session.getDefaultInstance();
    String mail = s.getServiceConfiguration().getEmailAddress();
    return mail;
} 

Dá para pegar também o nome do usuário.

Isso é legal para personalizar a aplicação com o nome do usuário, ou para pré-preencher um campo de login de sua aplicação.

Abraço.

Eventos da caneta em Canvas numa tela Touch Screen em JME?

Para interceptar os eventos da caneta, ou do dedo, numa tela de toque, usando Canvas em JME, basta implementar os métodos referente à caneta, que começam com pointer, da classe Canvas.

Veja um exemplo abaixo. Neste exemplo, conforme se percorre a caneta pela tela do device, vão surgindo pontos na tela, onde a caneta disparou o evento.

 Ler a continuação desse artigo…

Como instalar MIDlet JME em BlackBerry?

BlackBerry Pearl Red - DevMobileEnsinarei nesse post a instalar MIDlets JME nos devices BlackBerry de 2 maneiras.

Procedimento 1

Para instalar uma aplicação MIDlet no BlackBerry não é necessário nada de mais. Não é necessário gerar .COD.

Simplesmente gere o JAR/JAD normalmente, como se fosse colocar num outro device qualquer e disponibilize os 2 arquivos num servidor web comum, para que se possa fazer instalação da aplicação via OTA.

Você deve configurar os MIME Types de seu servidor web que armazenará os arquivos JAD e JAR com os MIME Types desses arquivos. Na maioria dos servidores isso não está configurado, e se não for configurado, não funcionará. Encontre as configurações de MIME Type do seu servidor, e adicione os MIME Types abaixo. Aproveite e já defina também o MIME Type das aplicações nativas BlackBerry, .COD.

Ler a continuação desse artigo…

Entendendo arquitetura JME: CDC, CLDC, MIDP 1.0, MIDP 2.0 e MIDP 2.1

CONFIGURAÇÃO CDC e CLDC:

Como parte fundamental na arquitetura JME temos o CDC E CLDC, que são configurações de dispositivos conectáveis. O CDC (Connected Device Configuration) é uma configuração de hardawares que têm memória considerável e alto poder de processamento, tais aparelhos têm uma conexão permanente e de maior largura de banda. Neste grupo podemos incluir os computadores de bordo, televisores e tabletes PCs. Diferentemente do CDC, o CLDC (Configuration Limited Device Configuration) abrange aparelhos em que a conexão é interrompida e/ou de pequena largura e banda. Esta configuração foi projetada visando suprir as necessidades de dispositivos com pouca memória, limitações gráficas e baixo poder de processamento. Os aparelhos com esta característica são os PDA’s, aparelhos celulares e os smartcards. Lembrando que as APIs de configuração atuam integradas com a JVM instalada nos dispositivos.

PERFIL MIDP E SUAS VERSÕES:

Um “perfil” serve para interagir com o dispositivo através da integração com a implementação instalada da CONFIGURAÇÃO, é como que um software disponível na configuração.

MIDP 1.0: Esta versão trabalha integrada com a configuração CLDC 1.0 ou 1.1. Visto que é uma versão inicial, ela não tem nenhuma API ativa para redenrização, também não oferece suporte para acesso direto aos pixels de imagens, não tem suporte para full screen/full canvas  sem uma API proprietária. Ainda, MIDP 1.0 não tem suporte direto para áudio. Enfim, o suporte que esta versão disponibiliza é apenas mesmo para HTTP.
Pacotes:

- javax.microedition.io
- javax.microedition.lcdui
- javax.microedition.rms
- javax.microedition.midlet

Características:

- 256 kb de memória não volátil
- 18 kb de memória volátil
- 8 kb de memória volátil (dados persistentes do programador)
- Display 96×54, 1-bit, 1:1
- Rede: two-way e wireless

MIDP 2.0: Veja as alterações feitas nesta versão.

- 256 kb de memória não volátil
- 18 kb de memória volátil
- 8 kb de memória volátil (dados persistentes do programador)
- Display 96×54, 1-bit, 1:1
- Rede: two-way e wireless

- Exigência de suporte à conexão segura (HTTPS)
- Biblioteca de multimídia
- Formulário de entrada de dados aprimorada
- Sensível melhoria na API de suporte a Games
- Conceito de aplicações confiáveis (Trusted) e não confiáveis (Untrusted)

MIDP 2.1: Esta versão reforça a especificação MIDP 2.0 tornando a diretiva layout LCDUI obrigatória, ainda javax.microedition.io.SocketConnection e javax.microedition.io.HTTPConnection não são mais opcionais, entre outros requisitos.

Como publicar sua aplicação nativa BlackBerry via OTA na web para ser instalada pelo browser do device?

blackberry-browser.jpgEnsinarei alguns macetes para você que desenvolveu uma aplicação nativa BlackBerry, e precisa publicá-la na web, para que outras pessoas possam instalá-la em seus devices usando o browser do próprio device, tal como fazemos com aplicações JME MIDlets. Chamamos esse tipo de publicação de OTA.

Quando você faz o deploy da sua aplicação no NetBeans, o NetBeans gera o arquivo .COD da sua aplicação dentro da pasta do simulador. O simulador fica dentro da pasta em que foi instalado o JDE. No meu caso:

C:\Dev\Java\Sdk\BlackBerryJDE4.2.1\simulator\MinhaAplicacao.cod

Dependendo do tamanho da sua aplicação, esse .COD criado dentro da pasta Simulador, na verdade é um arquivo .ZIP mascarado, com um ou mais .COD dentro dele. Para você instalar via OTA, você precisará descompactar esse .COD original, e fazer Upload desses vários .CODs descompactados para um diretório em seu FTP. Não envie para o FTP o .COD original, apenas os arquivos que estavam dentro dele.

Além de enviar para o FTP esses vários .CODs, será preciso enviar também o arquivo .JAD, que fica dentro da pasta “dist” do NetBeans. Sempre que você faz o deploy no NetBeans, o JAD e o COD são criados. O JAD fica dentro da de “dist”, já o COD vai para a pasta do simulador.

Ler a continuação desse artigo…

Como enviar uma aplicação nativa BlackBerry para o device usando o cabo USB?

blackberry-bold.jpgÉ muito prático, principalmente na hora do desenvolvimento, enviar suas aplicações nativas para o BlackBerry usando o cabo USB. Você precisará apenas do .COD final, aquele que é gerado na pasta do emulador BlackBerry.

Você precisará do BlackBerry Device Manager rodando. Normalmente ele aparece na área de notificação do windows (próximo ao relógio). Caso você não o tenha, instale-o. Você poderá baixá-lo no site www.blackberry.com. Se você instalou o BlackBerry Desktop Software, ele automaticamente instala o BlackBerry Device Manager.

Se certifique de que o cabo USB está conectado ao device e ao PC. Dê duplo clique no Device Manager, e aparecerão as portas COM. Deve aparecer também a porta “USB:PIN - Connected”. Caso não apareça, procure solucionar isso antes de continuar.

Eu sugiro criar uma pasta chamada OTA, dentro da pasta do seu projeto, e criar um arquivo .BAT com os três comandos MS-DOS, para que você não precise ficar digitando comandos sempre que quiser enviar a aplicação para o BlackBerry. O primeiro comando copia da pasta do simulador o último arquivo .COD gerado. O segundo comando apaga, ou desinstala, a aplicação antiga do device, caso ela exista. O terceiro comando envia para o device a sua aplicação .COD que rodou no emulador BlackBerry.

Ler a continuação desse artigo…

blogarama.com Globe of Blogs EatonWeb Blog Directory