Atenção: esse artigo tem uma palestra complementar. Clique e assista!

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Explorar os recursos da plataforma do Android para criar uma aplicação de cadastro de carros onde as informações são sincronizadas diretamente de um servidor web. É demonstrado como integrar a câmera para tirar a foto do carro e enviar para o servidor.


Para que serve:

Fornecer um exemplo prático de aplicação que executa em um dispositivo móvel e sincroniza as informações pela internet. Também explora diversos conceitos sobre a plataforma do Android, como a sua arquitetura focada em mensagens (intent) e boas práticas ao utilizar threads.


Em que situação o tema é útil:

Ao desenvolver aplicações móveis frequentemente é necessário se comunicar com a internet para buscar e enviar informações.

Explorando os recursos do Android:

O Android, comandado pelo Google e por gigantes do mercado de mobilidade que formam o grupo Open Handset Alliance (OHA) tem o objetivo de consolidar uma plataforma única com diversos recursos que os usuários procuram em um celular moderno, e ainda revolucionar a maneira de construir aplicações para dispositivos móveis e acirrar a disputa no mercado coorporativo. Este artigo explora alguns aspectos da arquitetura do Android à medida que uma aplicação de cadastro de carros é construída.

O Android é a plataforma open source criada pelo Google para o desenvolvimento de aplicações para dispositivos móveis, e promete esquentar a disputa no mercado de mobilidade. Neste artigo vamos construir uma aplicação de cadastro de carros para o Android, onde será possível inserir, editar e excluir carros, sincronizando os dados diretamente de um servidor web, fazendo requisições HTTP para um servlet. Também vamos demonstrar como integrar a câmera disponível no Android para tirar a foto do carro desejado e anexar no cadastro. Alguns componentes visuais como uma janela de progresso, barra de rolagem e criação de menus também serão abordados.

Android Virtual Device (AVD)

Se você desenvolve para Java ME deve estar acostumado a escolher em qual emulador você deseja executar a aplicação, que pode ser um emulador padrão da Sun ou algum que simula uma plataforma específica, como o da Nokia. Pense em um Android Virtual Device (AVD) da mesma forma, a diferença é que ele vai simular uma plataforma específica do Android.

Desta forma podemos criar uma configuração que possui o mesmo ambiente do celular HTC G1 (primeiro celular Android) ou outra que possui novas APIs de versões mais recentes do SDK.

No momento que este artigo estava sendo escrito, foi lançado o SDK 1.5, que possui três modelos de configurações (target). O primeiro simula exatamente o SDK 1.1 (HTC G1), o segundo e o terceiro são compatíveis com o SDK 1.5, sendo que o terceiro modelo adiciona o pacote para desenvolvimento de mapas.

Para listar os modelos de configurações disponíveis abra um prompt, navegue até a pasta tools do SDK e digite: android list targets. O resultado pode ser visualizado na lista a seguir que exibe o id de cada configuração.


  Available Android targets:
  id: 1
       Name: Android 1.1
       Type: Platform
       API level: 2
       Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
  id: 2
       Name: Android 1.5
       Type: Platform
       API level: 3
       Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
  id: 3
       Name: Google APIs
       Type: Add-On
       Vendor: Google Inc.
       Description: Android + Google APIs
       Based on Android 1.5 (API level 3)
       Libraries:
        * com.google.android.maps (maps.jar)
            API for Google Maps
       Skins: QVGA-P, HVGA-L, HVGA (default), QVGA-L, HVGA-P

Para criar um AVD digite no prompt: “android create avd --name <nome> --target <id>”. Para o nosso exemplo tanto faz a configuração escolhida, sendo que o mesmo funciona em qualquer SDK. Então vamos criar uma configuração com o id=1 e nome G1:

android create avd --name G1 --target 1”.

Criando o projeto no Eclipse

Com o SDK do Android e o plugin ADT do Eclipse devidamente instalados, utilize o wizard para criar um projeto Android com o nome “ExemploCadastroAndroid” e pacote br.javamagazine.cadastro. No campo Activity Name digite ListaCarros para ser a activity principal do projeto.

Depois de criar o projeto é necessário configurar o AVD em que a nossa aplicação será executada, o que pode ser feito acessando as propriedades do projeto. Feito isto é possível executar a aplicação no emulador. Para isto clique com o botão direito no projeto e selecione o menu Run as >Android Application. O projeto será executado no emulador e uma tela vai aparecer com o resultado. Mas isto seria suficiente se você apenas desejasse fazer um Olá Mundo. Neste artigo vamos construir uma aplicação completa de cadastro, integrando a câmera do Android e sincronizando os dados pela internet.

Repositório de Carros

Para persistir as informações deste exemplo, vamos criar uma interface RepositorioCarro conforme demonstrado na Listagem 1. Desta forma poderemos deixar a persistência separada da lógica de negócios, o que além de boa prática, torna a explicação do exemplo mais simples.

Listagem 1. Repositório de Carros


  public interface RepositorioCarro {
    // Insere ou atualiza o carro
    public boolean salvar(Carro carro);
   
    // Deleta o carro
    public boolean deletar(Carro carro);
   
    // Busca o carro pelo id
    public Carro getCarro(Long id);
   
    // Retorna uma lista com todos os carros
    public List<Carro> listarCarros();
   
    // Busca o carro pelo nome
    public Carro buscarCarroPorNome(String nome);
  }

Posteriormente podemos implementar esta interface da maneira que for necessário, como por exemplo, utilizando o banco de dados SQLite, disponível no Android. Mas neste artigo vamos criar uma implementação que busca e envia os carros diretamente de um servidor web, fazendo requisições HTTP para um servlet. Este tipo de aplicação é muito importante no mundo de mobilidade, e valoriza muito a aplicação sendo que podemos utilizar a internet para sincronizar e integrar a aplicação do celular com alguma aplicação já existente.

Para obter a implementação correta do repositório vamos utilizar o padrão Factory, conforme demonstrado a seguir:


  RepositorioCarro repositorio = RepositorioFactory.getRepositorioCarro();
  List<Carro> carros = repositorio.listarCarros();

Este repositório gerencia a entidade Carro que pode ser visualizada na Listagem 2. O carro possui um identificador (id), nome, placa, ano e um array de bytes para armazenar a foto.

Como nesta aplicação será necessário exibir a foto do carro na lista, foi criado o método getBitmap() nesta classe para converter o array de bytes da foto para Bitmap, classe que representa uma imagem no Android. Isto é necessário porque a classe ImageView utilizada para exibir uma imagem na tela possui o método setImageBitmap(bitmap).

...

Quer ler esse conteúdo completo? Tenha acesso completo