15 de janeiro de 2013

Listar aparelhos disponíveis no Bluetooth - Android

Antes de querer desenvolver qualquer aplicativo que necessite da tecnologia do Bluetooth, você precisa primeiro listar os aparelhos disponíveis na redondeza e guardar algumas informações importantes como o nome do aparelho encontrado e seu respectivo Mac Address para que uma conexão seja efetuada futuramente.

Diferente do que se imagina, para se listar os aparelhos que estão ligados no recurso do Bluetooth, não existe nenhuma complicação. O próprio Google Android nos facilita muito através da classe BluetoothAdapter que encapsula toda a complicação que se pode ter no gerenciamento desse processo.

Basicamente, para listarmos os aparelhos, precisamos dizer ao BluetoothAdapter que inicialize a busca por aparelhos. O BluetoothAdapter quando inicializar a busca irá lançar um BroadcastReceiver com uma Intent com a respectiva action BluetoothAdapter.ACTION_STARTED_DISCOVERY, e outro BroadcastReceiver quando a busca for finalizada com a action BluetoothAdapter.ACTION_FINISHED_DISCOVERY, e por final, quando algum aparelho for encontrado será lançado outro Broadcast com a action BluetoothDevice.ACTION_FOUND!
Espero que ajude vocês,

Att,
Felipe Bonezi




23 de outubro de 2012

Criando um ProgressBar indeterminado

A linguagem do Google Android nos permite a manipulação de componentes visuais de forma fácil e prática. Utilizando alguns conceitos de animação, resources e fé, podemos criar um ProgressBar que fique executando de forma indeterminada, ou seja, sem fim.

Geralmente, utilizamos estes ProgressBar's como forma de feedback para o usuário em operações que custam tempo, diminuindo o fator "estressante" do usuário com o aplicativo. Deste jeito, a experiência para com o aplicativo se eleva.

Irei exemplificar um ProgressBar, onde algum processando está sendo feito em background, enquanto este ProgressBar é exibido. Para isto, utilizaremos de uma classe e dois arquivos XML, que serão nossos "shapes" onde será feito uma animação de transposição das imagens.

shape_white.xml:
shape_orange.xml:

Esses dois shapes serão utilizados para termos o efeito de animação visível ao usuário. A única coisa que faremos será a transposição dessas duas imagens pelas ImageViews correspondentes do layout abaixo.

layout.xml:
Com nossos shapes inseridos em seu determinado layout, agora precisamos criar nossa classe responsável por carregar esta view e efetuar a animação de transposição.

ProcessingBar.java:
Lendo o código acima, percebemos que ao instanciarmos o construtor da classe ProcessingBar, os métodos prepareLayout() e startAnimation() são chamados, onde o primeiro é responsável por dar um inflate no layout que definimos acima, depois todas as imagens são instanciadas baseado em suas identificações e um ArrayList com o nome dos arquivos dos shapes (e.g. shape_white , shape_orange) é criado. Já o segundo método é responsável por iniciar a Thread responsável pela animação de transposição das ImageViews, basicamente a cada 300 milisegundos uma mensagem é enviada para nosso Handler, que ao capta-las executa um trecho de código modificando cada imagem das ImageView's baseado no nome dos shapes que estão contidas no ArrayList que criamos no método prepareLayout().

Simples, correto?
O resultado pode ser visto abaixo:


Espero que gostem do resultado.

22 de maio de 2012

Download de uma Imagem com AsyncTask - Android

Pessoal, hoje irei deixar registrado uma coisa que muitos pensam ser complexo, mas de complexo não tem nada, download de uma imagem. Graças a santo Android que desenvolveu uma classe auxiliar, "BitmapFactory", responsável pela criação do Bitmap que corresponde a imagem, não é trabalho nenhum fazer esta ação.

Tudo que precisamos fazer o código abaixo em uma thread diferente da UI, ou seja, devemos utilizar o recurso de AsyncTask em nosso código fonte. Veremos como é simples mesclar esses dois recurso da linguagem Android.

Para começarmos precisamos declarar um ImageView que será o responsável por exibir na tela a imagem que será baixada, uma String que será responsável por guardar o link da imagem que nós iremos baixar (coloquei uma qualquer) e a AsyncTask que será responsável por criar uma nova Thread para que o processamento de download da imagem não interfira na thread da UI, ocasionando um travamento do aplicativo.
Depois disso, tudo que precisamos fazer é chamar no nosso onCreate a nossa AsyncTask, não esquecendo de inicializar nosso ImageView, já que iremos modificar seu conteúdo quando nosso resultado for diferente de 'null'.

Simples, não é? =)

Espero que ajude vocês! =)
Abraço.

18 de maio de 2012

Adapter Eficiente - Android

Pessoal, hoje irei postar um vídeo post falando sobre como fazer um adapter eficiente.
Espero que vocês gostem.


OBS: Quem sabe depois do vídeo vocês não refazem este exemplo que postei a muito tempo atrás?

Abraço.

15 de maio de 2012

EditText com máscara monetária - Android

Uma das facilidades que o android dá é a criação de máscaras para manipularmos entradas que são feitas no EditText. Uma máscara bastante conhecida é a monetária, onde ao inserirmos números é feito uma filtragem para que fique no formado R$0,00.
Ou seja, se digitarmos '1' ficará R$0,01 se digitarmos '2' ficará R$0,12 e se digitarmos '3' ficará R$1,23!

Muito legal né? Mais legal é a implementação.
Tudo que devemos fazer é manipular o método 'addTextChangedListener(TextWatcher listener)'!



Espero que ajude vocês! =)
Abraço.

5 de maio de 2012

Validação de CPF em JAVA

Vira e volta uma validação de C.P.F. é muito perguntado a mim. Para sanar esta necessidade vou postar aqui o "simples" código que faz essa verificação.

Antes de tudo, temos que entender a lógica do algoritmo de validação. Para considerarmos um C.P.F. correto, devemos apenas verificar se o DÍGITO VERIFICADOR, os dois últimos dígitos, serão criados pelo nosso algoritmo
O cálculo é muito chato, mas vamos lá:
1º Guarde a soma da multiplicação do nove primeiros termos do C.P.F. por uma variável que incrementa, começando por 1.
2º O primeiro dígito será o resto da divisão por 11 (% 11).
3º Zere a soma.
4º Guarde a soma da multiplicação dos nove primeiros termos concatenado com o digito encontrado por uma variavel que incrementa, começando por 0.
5º O segundo dígito será o resto da divisão por 11 (%11).
6º Verifique se os dígitos encontrados são iguais aos digitos do cpf informado.

Fácil? Na verdade é chato!!!! Tanto que nem vou fazer o código, apenas irei disponibilizado. =)

  1.  private static boolean validaCPF(String cpf) {  
  2.       boolean ret = false;  
  3.       String base = "000000000";  
  4.       String digitos = "00";  
  5.       if (cpf.length() <= 11) {  
  6.          if (cpf.length() < 11) {  
  7.             cpf = base.substring(0, 11 - cpf.length()) + cpf;  
  8.             base = cpf.substring(0, 9);  
  9.          }  
  10.          base = cpf.substring(0, 9);  
  11.          digitos = cpf.substring(9, 11);  
  12.          int soma = 0, mult = 11;  
  13.          int[] var = new int[11];  
  14.          // Recebe os números e realiza a multiplicação e soma.  
  15.          for (int i = 0; i < 9; i++) {  
  16.             var[i] = Integer.parseInt("" + cpf.charAt(i));  
  17.             if (i < 9)  
  18.                soma += (var[i] * --mult);  
  19.          }  
  20.          // Cria o primeiro dígito verificador.  
  21.          int resto = soma % 11;  
  22.          if (resto < 2) {  
  23.             var[9] = 0;  
  24.          } else {  
  25.             var[9] = 11 - resto;  
  26.          }  
  27.          // Reinicia os valores.  
  28.          soma = 0;  
  29.          mult = 11;  
  30.          // Realiza a multiplicação e soma do segundo dígito.  
  31.          for (int i = 0; i < 10; i++)  
  32.             soma += var[i] * mult--;  
  33.          // Cria o segundo dígito verificador.  
  34.          resto = soma % 11;  
  35.          if (resto < 2) {  
  36.             var[10] = 0;  
  37.          } else {  
  38.             var[10] = 11 - resto;  
  39.          }  
  40.          if ((digitos.substring(0, 1).equalsIgnoreCase(new Integer(var[9])  
  41.                .toString()))  
  42.                && (digitos.substring(1, 2).equalsIgnoreCase(new Integer(  
  43.                      var[10]).toString()))) {  
  44.             ret = true;  
  45.          }  
  46.       }
  47.   
  48.       return ret;  
  49.    }


Espero que tenham entendido,
Abraço.