Baixe o app para aproveitar ainda mais
Prévia do material em texto
13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 1/13 Buscar fontes comentários favorito (3) marcar como lido para impressão anotar Buscando dispositivos bluetooth no Android Veja neste artigo como realizar uma busca de dispositivos Bluetooth programaticamente através do Android. Gostei (2) (0) Introdução Bluetooth é um protocolo padrão de comunicação primariamente projetado para baixo consumo de energia e com baixo alcance. 6 12Curtir6 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 2/13 A plataforma Android inclui suporte para a rede Bluetooth, permitindo que dispositivos troquem dados em uma rede sem fio. O Android Bluetooth API fornece acesso a várias funcionalidades do dispositivo, permitindo a comunicação entre eles pontoaponto e multiponto. Uma aplicação Android usando esta API pode desfrutar dos recursos: Verificar se há outros dispositivos Bluetooth; Consultar o adaptador Bluetooth local para dispositivos Bluetooth emparelhados; Estabelecer canais RFCOMM; Conectar a outros dispositivos através do serviço de descoberta; Transferir dados para e de outros dispositivos; Gerenciar conexões múltiplas. Neste artigo veremos como realizar uma busca e pegar o objeto referente ao dispositivo, através desse objeto podemos estabilizar uma conexão direta e realizar varias tarefas. 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 3/13 Figura 1: Lista de dispositivos encontrados em uma busca Codificando Para utilizar os recursos do Bluetooth em seu aplicativo, o Android pede para você declarar as seguintes permissões dependendo do uso: BLUETOOTH e BLUETOOTH_ADMIN. A permissão BLUETOOTH é necessária para realizar qualquer comunicação entre 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 4/13 dispositivos, como solicitar uma conexão, aceitar ou transferir dados. A BLUETOOTH_ADMIN é necessária para iniciar a descoberta de dispositivos ou manipular suas configurações. A maioria dos aplicativos precisa dessa permissão pelo simples fato de buscar dispositivos. Caso você utilize essa permissão você também deve declarar a permissão BLUETOOTH. Listagem 1: Declaração das permissões no Manifest.xml ... O Exemplo de busca é bem simples, vamos ter somente um layout “main.xml” que deve conter um ListView para inserirmos as informações decorrente ao processo de busca. Listagem 2: Arquivo main.xml Já temos nossa estrutura, declaramos as permissões e construímos nosso layout. O próximo passo é desenvolver a classe Bluetooth.java para tratar nossa busca. Ela deve estender a classe BroadcastReceiver, que trata tudo o que for enviado pelo broadcast registrado na activity como se fosse um “listener”. Caso fique com duvidas sobre o que é um Broadcast verifique na documentação do Android, para facilitar o entendimento. 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 5/13 Vamos explicar tudo por partes para que não fique confuso. Na classe Bluetooth vamos ter 3 atributos, uma interface (que será o listener), um método para iniciar a busca e outro método sobrescrito da nossa super classe (que recebera as respostas do broadcast). Nosso construtor privado deve receber somente um parâmetro que é o BluetoothListener ele vai ser criado dentro dessa mesma classe com o intuito de notificar a busca. Listagem 3: A classe Bluetooth.java estrutura public class Bluetooth extends BroadcastReceiver { [...] private BluetoothListener listener; private ArrayList lista; private BluetoothAdapter dispositivo; private Bluetooth(BluetoothListener listener) { this.listener = listener; lista = new ArrayList(); } [...] //métodos gets e sets [...] } Na interface vamos definir um método action() e três ações para que tenhamos o controle do que está ocorrendo. Essas ações estão interligadas com as ações do Android Bluetooth API das classes BluetoothAdapter e BluetoothDevice. Listagem 4: Interface de notificação BluetoothListener public static interface BluetoothListener { public static final String ACTION_DISCOVERY_STARTED = BluetoothAdapter.ACTION_DISCOVERY_STARTED; public static final String ACTION_FOUND = BluetoothDevice.ACTION_FOUND; public static final String ACTION_DISCOVERY_FINISHED = BluetoothAdapter.ACTION_DISCOVERY_FINISHED; 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 6/13 public void action(String action); } No método abaixo vamos instanciar nossa classe tratar se o bluetooth está desativado, registrar os broadcasts referentes ao nosso listener e iniciar a busca de dispositivos. Listagem 5: Método principal responsável por tratar e iniciar a busca. public static Bluetooth startFindDevices(Context context, BluetoothListener listener) throws IOException { Bluetooth bluetooth = new Bluetooth(listener); //Pego o adapter bluetooth.dispositivo = BluetoothAdapter.getDefaultAdapter(); // verifico se o bluetooth esta desabilitado, se tiver habilito //retorno null (tratar) if (!bluetooth.dispositivo.isEnabled()) { bluetooth.dispositivo.enable(); return null; } // Registro os Broadcast necessarios para a busca de dispositivos IntentFilter filter = new IntentFilter(BluetoothListener.ACTION_FOUND); IntentFilter filter2 = new IntentFilter(BluetoothListener.ACTION_DISCOVERY_FINISHED); IntentFilter filter3 = new IntentFilter(BluetoothListener.ACTION_DISCOVERY_STARTED); context.registerReceiver(bluetooth, filter); context.registerReceiver(bluetooth, filter2); context.registerReceiver(bluetooth, filter3); //inicio a busca e retorno a classe instanciada. bluetooth.dispositivo.startDiscovery(); return bluetooth; } Você já deve ter sobrescrito o método onReceive do BroadcastReceiver. Abaixo vamos tratar cada Broadcast que foi registrado e chamar o listener para informar o que está acontecendo. LOGIN 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 7/13 Listagem 6: Implementação do método onReceive() do BroadcastReceiver @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //caso encontre um dispositivo: if (action.compareTo(BluetoothDevice.ACTION_FOUND) == 0) { //pega as o dispositivo encontrado: BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //se a lista já tiver esse dispositivo eu retorno para o proximo //isso permite que sejá mostrado somente uma vez meu dispositivo //problema muito comum em exemplos if (lista.contains(device)) { return; } //adiciono o dispositivo na minha lista: lista.add(device); } else if (action.compareTo(BluetoothAdapter.ACTION_DISCOVERY_FINISHED) == 0) { //caso o discovery chegue ao fim eu desregistro meus broadcasts //SEMPRE FAÇA ISSO quando terminar de usar um broadcast context.unregisterReceiver(this); } if (listener != null) { //se foi definido o listener eu aviso a quem ta gerenciando. listener.action(action); }} A classe Bluetooth.java está pronta para ser utilizada. Agora Vamos trabalhar em cima da MainActivity.java. Primeiramente será definida a interface da classe Bluetooth para lermos as ações da busca. No método onCreate() vamos chamar o método estático da classe Bluetooth para iniciar a busca e definir um adaptador para o ListView. 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 8/13 Em nosso action() que foi sobrescrito de nossa interface implementada serão tratadas todas as ações da busca de dispositivos e assim que chegar no fim vamos popular o ListView com a lista de dispositivos. Listagem 7: Utilização da classe Bluetooth.java public class MainActivity extends Activity implements Bluetooth.BluetoothListener { private static final String TAG = "BuscaBluetooth"; private Bluetooth bluetooth; private ArrayAdapter arrayAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { bluetooth = Bluetooth.startFindDevices(this, this); } catch (Exception e) { Log.e(TAG, "Erro: ", e); } arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1); ListView listView = (ListView) findViewById(R.idMain.listview); listView.setAdapter(arrayAdapter); } public void action(String action) { if (action.compareTo(ACTION_DISCOVERY_STARTED) == 0) { arrayAdapter.add("‐Busca iniciada"); } else if (action.compareTo(ACTION_DISCOVERY_FINISHED) == 0) { preencherLista(); arrayAdapter.add("‐Fim de busca."); } } private void preencherLista() { for (BluetoothDevice device : bluetooth.getDispositivos()) { arrayAdapter.add(device.getName() + "\n" + device.getAddress()); } } } 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 9/13 Como um opcional também foi inserido um método na classe Bluetooth.java que permite pegar os dispositivos já pareados ao seu aparelho, porém de uma maneira direta sem a necessidade de utilizar o listener, pois não é realizada uma busca. Veja na listagem abaixo. Listagem 8: Método opcional para pegar dispositivos já pareados. public static Bluetooth getBondedDevices(Context applicationContext) throws IOException { Bluetooth bluetooth = new Bluetooth(null); // Pega o dispositivo bluetooth.dispositivo = BluetoothAdapter.getDefaultAdapter(); if (!bluetooth.dispositivo.isEnabled()) { bluetooth.dispositivo.enable(); } // Pega a lista de dispositivos pareados Set pairedDevices = bluetooth.dispositivo.getBondedDevices(); // Adiciono na lista e depois retorno a mesma. if (pairedDevices.size() > 0) { for (BluetoothDevice device : pairedDevices) { bluetooth.lista.add(device); } } return bluetooth; } Conclusão A busca de dispositivos é sempre utilizada quando você tem uma aplicação que necessita de uma comunicação com outro dispositivo Bluetooth, através dessa consulta vamos obter os dados como nome e endereço dos dispositivos, assim podem estabelecer uma comunicação com os recursos do Android Bluetooth API, para a troca 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 10/13 Gostei (2) (0) O que você achou deste post? Postar dúvida / Comentário de informação. Com isso finalizo esse artigo. No link “código fonte”, no topo dessa página, está o projeto que foi utilizado como exemplo. Até o próximo, um grande abraço e obrigado. Referências Developer Android, Android, acessado em 11122012. Guilherme Biff Zarelli Programador Java/Android http://helpdev.com.br/zarelli/ + Mais conteúdo sobre Mobile Todos os comentarios (5) Meus comentarios Jeremias Queiroz Dos Santos Onde consta este metodo? bluetooth.getDispositivos() 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 11/13 Não localizei. [há +1 ano] Responder Jeremias Queiroz Dos Santos Consegui localizar. hehe! Obrigado! [há +1 ano] Responder Mauricio Paludetti então por favor compartilhe, pois eu não... [há +1 ano] Responder Éder Franco é por favor compartilhe, não entendi essa parte do código... [há +1 ano] Responder Jeremias Queiroz Dos Santos Faz tem que resolvi isto que nem lembro mais, porém os código que estava fazendo na epoca coloquei no github: https://github.com/jeroqueiroz/BuscaDispBluetooth tem outros projetos android que estava usando época estão todos funcionando. [há +1 ano] Responder Publicidade MVP MVP 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 12/13 Mais posts Video aula Criando mensagens de alerta com AlertDialog - Curso de Android Studio - Aula 17 Video aula Customizando os Toasts - Curso de Android Studio - Aula 16 Video aula Widgets: ActionBar e Toast - Curso de Android Studio - Aula 15 Video aula Support Library: appcompat v4 e v7 - Curso de Android Studio - Aula 14 Video aula Trabalhando com cores e estilos - Curso de Android Studio - Aula 13 Video aula Trabalhando com dimensões - Curso de Android Studio - Aula 12 13/10/2015 Buscando dispositivos bluetooth no Android http://www.devmedia.com.br/buscandodispositivosbluetoothnoandroid/26605 13/13 Listar mais conteúdo Anuncie | Loja | Publique | Assine | Fale conosco Hospedagem web por Porta 80 Web Hosting Seja o primeiro de seus amigos a curtir isso. DevMedia 79 mil curtidasCurtir Página
Compartilhar