|
|
Certificação LPI-1 3ª Edição
Infraestrutura de Redes
Samba: Windows e Linux em rede
Coleção Academy - Leve 3 pelo preco de 1
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.
![]() |
| 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. |
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;
}
![]() |
| 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:
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...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...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...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...