LM 90 | Computação em nuvem

     

   Siga-nos no Twitter                         
Preencha os campos abaixo para entrar na sua conta:
Esconder

Materia

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

Poupe tempo em tarefas de rotinaPublicado em 04/05/2012 às 17:02

Automatizar tarefas rotineiras com a fabulosa ferramenta AutoKey torna a sua computação diária mais eficiente.

Leia mais...
O CIO do futuro: maestro, e não um mestrePublicado em 04/05/2012 às 11:57

Como a computação em nuvem vai mudar o futuro do CIO?

Leia mais...
Estratégias para Big Data – você tem uma?Publicado em 03/05/2012 às 16:18

Cada vez mais, as empresas buscam maneiras de transformar grandes volumes de informações em estratégias de negócios bem sucedidas.

Leia mais...
Avaliação do Ubuntu 11.04 "Natty Narwhal"Publicado em 10/05/2011 às 12:07

A distribuição mais GNU/Linux mais utilizada em desktops atualmente chega com o lançamento mais polêmico e ao mesmo tempo mais importante de sua curta história. O Unity é a nova "cara" do Ubuntu

Leia mais...
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...
Mais matérias
Meu carrinho
Meu carrinho Carrinho vazioIr para a loja
Shopping

Whitepapers