Cadastro Newsletter

A revista do profissional de TI

Parceiros

Asterisk Brasil Br-Linux Clublinux Fuctura Invasão Ubuntu Games Ubuntu-SP Invasão
Shopping
computador e software
 
Yatego - O maior site de comércio eletrônico da Alemanha.
Só o melhor
8500 lojas, 3,1 milhões de excelentes artigos
Melhores
Mais relevantes

Meu carrinho 67 ItensR$ 4502,40Finalizar compra
Home » Matérias » Mobilidade Programada II — Programando um rastreador GPS para o Android

Shopping

Certificação LPI-1 3ª Edição
3ª edição revista e ampliada do livro com curso completo para a nova Certificação LPIC-1.
Saiba mais
LPI-1 3ª ed. + LPI-2 2ª ed.
LPI-1 + LPI-2 por apenas R$ 99,00. Saiba mais
Infraestrutura de Redes
Passo a passo da montagem de uma rede de computadores, desde o cabeamento e roteadores até a configuração das máquinas clientes Saiba mais
Samba: Windows e Linux em rede
Como permitir a comunicação de diferentes sistemas operacionais em rede: Windows, Linux, Mac OS X, etc. Saiba mais
Coleção Academy - Leve 3 pelo preco de 1
Leve os três volumes da Coleção Academy por apenas R$29,90 Saiba mais

Matéria

Mobilidade Programada II — Programando um rastreador GPS para o Android

Publicado em 12/02/2009 às 1:04

Versão para impressão Enviar por email

Publicidade

A evolução do IPS

Os sistemas de prevenção/proteção contra intrusão (IPS) não são mais os mesmos
Faça o download do Whitepaper

Por Oliver Frommel

A versão 1.1 do SDK do Android acabou de ser lançada, e corrige alguns erros da versão anterior, além de introduzir melhorias de compatibilidade do celular G1, que já pode rodar a nova versão 1.1.0 do Android. Há alguns dias publicamos um artigo inicial, que mostrava como preparar adequadamente um ambiente de desenvolvimento de aplicativos para o Android. Neste segundo artigo da série, vamos mostrar como desenvolver um programa de apenas poucas linhas de código, mas que é capaz de ler e exibir coordenadas GPS.

Com o SDK do Android e o plug-in para o Eclipse, é relativamente simples desenvolver aplicativos para celulares equipados com a plataforma operacional baseada em Linux desenvolvida pelo Google. As ferramentas contidas nesse kit de desenvolvimento funcionam bem, são fáceis de usar e a API é bem estruturada e documentada. Além disso, há na Internet uma grande quantidade de exemplos para todo o tipo de aplicação. Entretanto, é necessário estar atento ao fato de que o código-fonte de muitos desses programas é compatível com a versão anterior do sistema, mas não com a versão atual, recém-lançada. Conforme escrevemos acima, o aplicativo que vamos desenvolver neste artigo terá por função estender a estrutura do programa criada automaticamente pelo Eclipse no artigo anterior, tranformando-a em um aplicativo rastreador GPS, capaz de fornecer as coordenadas da posição geográfica atual.

Usando o ambiente instalado no artigo anterior, composto basicamente do kit de desenvolvimento do Android e o plug-in do Eclipse, é possível compilar um aplicativo rudimentar e executá-lo no emulador que faz parte do SDK. Caso um G1 “de verdade” seja conectado via USB ao PC ou laptop com Linux dotado com o ambiente de desenvolvimento, pode ser que ele não seja detectado pelas ferramentas do Android que o Eclipse roda em background, para — por exemplo — carregar aplicativos para o equipamento. A solução para contornar esse problema é configurar corretamente o subsistema udev, responsável pela criação e pelas permissões de arquivos de dispositivos no Linux. A seguinte regra fornece as permissões corretas ao arquivo de dispositivo criado quando o G1 é conectado ao computador:

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

Basta incluir a linha acima no arquivo /etc/udev/rules.d/50-android.rules e tornar esse arquivo executável, e daí por diante tudo deveria funcionar corretamente.

Como a figura seguinte mostra, o código gerado pelo Eclipse quando configuramos o sistema no artigo anterior, ficou bastante sucinto.

Ambiente Eclipse
Código gerado automaticamente pelo Eclipse, quando da criação do projeto do aplicativo que será desenvolvido, logo após a instalação do SDK e do plug-in.

A própria classe hello estende a classe Activity do sistema, que está prevista para uso em aplicativos de interface gráfica padrão. O pouco que resta do código está no método de retorno de chamada (callback) onCreate(), que é executado quando o aplicativo é inicializado. Após a chamada do método de retorno de chamada da classe pai, resta apenas ativar o modo de exibição na componente de layout main. O Eclipse deixa esse tipo de recurso armazenado no arquivo R.java, que é atualizado constantemente. Modificações nesse arquivo devem, assim, ser evitadas, para que não ocorram conflitos.

Para imprimir o clássico Olá mundo! no visor do celular, não é necessário nada além de um TextView, que deve então ser ativado como elemento de exibição atual. A cadeia de caracteres a ser apresentada no visor é fornecida ao objeto TextView pelo método setText().

TextView tv = new TextView(this);
tv.setText("Hello Android");
setContentView(tv);

Se o que se deseja é mais do que exibir um texto sem graça no visor — por exemplo, a posição geográfica atual do celular —, é necessário estar familiarizado com o conceito de “ouvinte” (listener). Em várias ocasiões, esse conceito serve de interface para determinados eventos — regulares ou ocasionais —, tais como o fornecimento de dados pelo usuário. O programador deve criar suas próprias funções como ouvintes de determinados eventos, de modo que essas funções sejam executadas quando o evento ocorrer. A plataforma Android assegura que os aplicativos não consumam tempo de processamento desnecessariamente, mas que permaneçam em estado latente, reagindo prontamente quando o evento designado para ela aconteça.

Uma característica notável da API do Android é que ela está perfeitamente adaptada ao desenvolvimento de aplicativos específicos para o G1. Assim, bastam algumas poucas linhas de código, para que se possa determinar a atual posição geográfica do celular via GPS. Para isso, basta criar um novo LocationProvider e associar a ele, através de um de seus métodos, uma função customizada — no nosso caso, locationListener, que é chamada de modo recorrente de tempos em tempos.

LocationProvider provider = lm.getProvider("gps");
lm.requestLocationUpdates("gps",
        60000, // 1min
        1,   // 10m
        locationListener);

Além do uso das coordenadas do GPS, há também outros tipos de LocationProvider, que por exemplo conseguem obter a posição geográfica de maneira mais precisa a partir da célula em que o telefone se encontra. A nossa função customizada LocationListener só precisa ler a latitude e a longitude através dos métodos do objeto de localização geográfica e fornecê-las ao objeto TextView:

private final LocationListener locationListener = new LocationListener() {
      public void onLocationChanged(Location l) {
         TextView tv = new TextView(LnmTrakr.this);
         tv.setText("lat: " + l.getLatitude() + "\nlon: " + l.getLongitude());
         setContentView(tv);
      }
      ...

Como esse código cria empiricamente uma classe anônima, é necessário que a TextView faça uma referência à classe mais externa usando LnmTrakr.this. Para simular o funcionamento do equipamento de GPS no emulador do celular, é necessário realizar uma conexão via telnet ao emulador — usando para isso o comando telnet localhost 5554 — e, no console que se abrir, fornecer as coordenadas usando a seguinte sintaxe: geo fix 20 40.

Programa em execução, mostrando a latitude e a longitude no emulador do SDK.
Programa em execução, mostrando a latitude e a longitude no emulador do SDK.

Ao rodar esse aplicativo no emulador ou no próprio celular, percebe-se logo que não há como fechar esse programa. Com mais alguma linhas de código pode-se dotar o aplicativo de um menu próprio com um botão de “Sair”. O código abaixo ilustra como criar um menu com diversas opções de entrada (algumas delas estão “comentadas”, isto é, desativadas):

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, 0, 0, "Exit");
    //menu.add(Menu.NONE, 1, 1, "Settings");
    //menu.add(Menu.NONE, 2, 2, "Other");
    return true;
}

Com o manipulador de eventos apropriado, o programa pode ser encerrado, bastando para isso que se selecione o “0” no menu:

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
    case 0:
        finish();
    }
    return false;
}

Ambiente Eclipse
O Google quer coletar dados sobre o uso do Android. Claro, se não quisesse, não seria o Google...

Assim, com apenas algumas linhas de código, um primeiro aplicativo — capaz de realizar várias tarefas — foi finalizado. O código fonte em Java do arquivo principal pode ser baixado aqui. Apenas mais algumas linhas de código e o aplicativo torna-se capaz de — adivinhe — mostrar a posição geográfica atual no Google Maps. Ao finalizar o Eclipse, o Google preparou uma janela extra, com o intuito de lhe pedir permissão para realizar estatísticas sobre o seu uso do Android.

O programador pode escolher não conceder essa permissão — ao contrário do usuário do G1, que não tem essa opção.

Saiba mais:

Compartilhe


Comentários

Entre seus dados para comentar a matéria:


Esqueceu a senha?
Cadastro

Outras matérias

Linux 2.6.33Publicado em 04/03/2010 às 14:25Confira o que a versão mais recente do kernel Linux 2.6.33 traz de novo.Leia mais...
Particionamento ideal no UbuntuPublicado em 03/03/2010 às 17:14Quer atualizar o sistema sem perder nenhuma das suas configurações pessoais (papel de parede, ícones da área de trabalho)? Então leia este artigo e aprenda a "criar um /home separado no Ubuntu".Leia mais...
Controle de usuários com GNU Accounting UtilitiesPublicado em 29/01/2010 às 9:16Para gerenciar servidores Linux com mais qualidade e segurança, é necessário saber tudo que acontece e como acontece. Para nos ajudar nessa tarefa, podemos usar as GNU Accounting Utilities, mais conhecidas por acct.Leia mais...
“Liberdade não é liberdade de escolha” – assim falou Richard StallmanPublicado em 18/06/2009 às 20:23Em sua atual passagem pelo Brasil, Richard Stallman concedeu à Linux Magazine uma agradável entrevista. Ele falou sobre SCO, Sun, Oracle, a liberdade de software e o conflito com aqueles que desejam subverter o significado de “Free Software” (Software Livre), usando em seu lugar o termo “Open Source” (Código Aberto) – além de críticas à Microsoft e ao software proprietário como um todo, é claro.Leia mais...
Análise do novo Ubuntu 9.04Publicado em 27/04/2009 às 4:43

Pontualmente na data de lançamento programada — que acontece em um ciclo de seis meses — foi lançada a nova versão do Ubuntu, a 9.04, codinome Jaunty Jackalope. Devagar — mas sempre —, a distribuição patrocinada pela Canonical avança em usabilidade, desempenho e beleza. Este artigo traz uma análise do novo Ubuntu, apresentando as maiores novidades da versão 9.04.

Leia mais...
Xen: Entrevista com CTO de virtualização da Citrix e com gerente da comunidade XenPublicado em 20/04/2009 às 15:05

Entrevista com Simon Crosby, CTO da divisão de virtualização e gerenciamento da Citrix, e Stephen Spector, gerente de comunidade Xen.org

Leia mais...
Kernel 2.6.29: O Linux está com o diabo (da Tasmânia)!Publicado em 24/03/2009 às 20:04Novo kernel, novo recorde. Com mais de 1 milhão de novos trechos de código, o Linux 2.6.29 chega repleto de novidades para todos os usuários.Leia mais...
Análise do Debian 5.0 “Lenny” [ATUALIZADA]Publicado em 16/02/2009 às 2:53

Quase dois anos após o lançamento da versão 4.0 (codinome “Etch”) — e pouco depois do lançamento de sua sétima revisão —, a equipe de desenvolvimento do projeto Debian lançou finalmente a versão 5.0 (codinome “Lenny”) de uma das distribuições GNU/Linux mais conceituadas entre os profissionais habituados a trabalhar com o sistema do pinguim. Com nossa análise você ficará sabendo o que mudou, o que melhorou, se algo piorou e como está a nova versão do Debian.

Leia mais...
Mobilidade programada — Programando aplicativos móveis com o SDK do Android no EclipsePublicado em 08/02/2009 às 12:56

Recentemente, publicamos o artigo Programe seu andróide, com o qual é possível aprender como desenvolver um primeiro aplicativo para o “celular do Google”. A partir de agora, vamos publicar uma série de artigos, em um formato que ilustrará passo-a-passo, como desenvolver programas para o Android, sendo que cada um dos artigos se ocupará apenas de uma parte do processo de criação de programas para a plataforma.

Leia mais...
Mais matérias