Nesse artigo será apresentada a API de Bluetooth da plataforma Android, onde através de um exemplo prático será demonstrado como estabelecer a comunicação e trocar informações entre os dispositivos utilizando esta tecnologia.
Para que serve:
Atualmente os dispositivos podem enviar e receber informações através das redes Wi-Fi e 3G. Porém, a tecnologia Bluetooth é uma alternativa a ser utilizada para transmissão de dados em curta distância, de forma gratuita, e sem a necessidade de uma infraestrutura de rede.
Em que situação o tema é útil:
Utilizando Bluetooth é possível expandir os limites das aplicações Android fazendo com que elas interajam diretamente com outras aplicações no formato de redes ponto a ponto. Sua utilização pode ir desde a sincronização de dados do dispositivo móvel com aplicações desktop (como agendas e listas de afazeres), até a criação de jogos multiplayer.
Resumo DevMan
A tecnologia Bluetooth permite a criação de pequenas redes sem fio, também chamadas de WPANs (Wireless Personal Area Network), onde seus participantes podem trocar informações a curta distância (normalmente até 10 metros). Neste contexto, nesse artigo será apresentada a API de Bluetooth da plataforma Android, onde através de um exemplo prático será demonstrado como estabelecer a comunicação e trocar informações entre os dispositivos utilizando esta tecnologia.
Um grande atrativo de desenvolver aplicações e jogos para celulares é a mobilidade que eles nos proporcionam. Essa característica exige que os aparelhos estejam constantemente se comunicando com outros dispositivos para enviar e receber informações. A utilização de Web Services e XML está sendo cada vez mais utilizada para interagir com a web. Porém, nem sempre é necessária uma infraestrutura como essa para transferir informações. A tecnologia Bluetooth permite a criação de pequenas redes sem fio, também chamadas de WPANs (Wireless Personal Area Network), onde seus participantes podem trocar informações a curta distância (normalmente até 10 metros).
A partir da versão 2.0 (Donut), a plataforma Android disponibilizou o acesso à API de Bluetooth (pacote android.bluetooth) de modo que os desenvolvedores pudessem utilizar esse recurso em suas aplicações. Através dela é possível ter acesso a toda a pilha de protocolos Bluetooth, permitindo realizar a busca por dispositivos disponíveis em sua área de alcance, estabelecer a conexão, e por fim trocar informações entre eles.
Nesse artigo veremos quais são as principais classes da Bluetooth API. Em seguida, explicaremos o processo de conexão entre os aparelhos. Por fim, aplicaremos os conceitos apresentados desenvolvendo uma aplicação de bate-papo, onde dois aparelhos possam trocar mensagens via Bluetooth.
Não entraremos em detalhes conceituais da tecnologia como a pilha de protocolos, frequência de rede e classes de aparelhos. Nosso foco será na aplicação da tecnologia com a plataforma Android. Apesar disso, os conceitos essenciais serão explicados à medida que forem se fazendo necessários. Um ótimo artigo que aborda essa parte teórica foi escrito por Fábio Mesquita Póvoa para a 4ª edição da WebMobile Magazine. Outra ótima fonte é o site oficial da tecnologia (veja na seção Links).
Bluetooth API
A tecnologia Bluetooth é requisito obrigatório em aparelhos Android a partir da versão 2.0, e desde então os desenvolvedores podem aproveitar esse recurso através da Bluetooth API disponível no pacote android.bluetooth. As principais classes desse pacote são: BluetoothAdapter, BluetoothDevice, BluetoothServerSocket e BluetoothSocket.
A classe BluetoothAdapter representa o adaptador Bluetooth e serve como o ponto de partida para realizarmos todo o processo de conexão. Com ele podemos realizar a busca por aparelhos, obter a referência para os dispositivos da rede e aguardar por conexões cliente.
O dispositivo Bluetooth é representado pela classe BluetoothDevice. Através dela podemos obter informações do aparelho, tais como: o tipo do dispositivo (smartphone, computador, fone de ouvido, etc.), seu nome amigável (friendly name) e o endereço físico (MAC address).
A conexão é estabelecida através das classes BluetoothServerSocket e BluetoothSocket. Elas funcionam de forma semelhante ao java.net.ServerSocket e java.net.Socket. A primeira abre uma conexão e aguarda por conexões cliente. Quando essa conexão é estabelecida, uma instância de BluetoothSocket é retornada, e a partir dessa instância, podemos obter os objetos InputStream e OutputStream para ler e escrever informações pela rede.
Apresentadas as principais classes, veremos as etapas para utilização de cada uma delas em uma aplicação.
Permissões
A arquitetura de segurança do Android garante que uma aplicação só faça algo que possa comprometer os dados do usuário ou onerá-lo mediante sua permissão. Ao ser instalada, a aplicação informa ao Android quais desses recursos ela utiliza, e exige uma confirmação do usuário. Dessa forma, ele fica ciente de quais recursos a aplicação necessitará. Realização de chamadas de voz, envio de mensagens SMS e acesso à internet são exemplos de recursos que necessitam da permissão do usuário.
Para utilizar os recursos de Bluetooth do aparelho, a aplicação precisa ter as permissões android.permission.BLUETOOTH e android.permission.BLUETOOTH_ADMIN. Elas devem estar declaradas no arquivo AndroidManifest.xml. A primeira é necessária para utilizar qualquer recurso Bluetooth, enquanto a segunda é requerida para permitir ativar o Bluetooth do aparelho, caso esteja desligado, e para realizar a busca por dispositivos (ver Listagem 1).
Listagem 1. Permissão para utilização de Bluetooth.
1. <uses-permission
android:name="android.permission.BLUETOOTH"/>
2. <uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"/>
Ativando o Bluetooth
Para utilizar qualquer recurso Bluetooth na nossa aplicação, precisamos da instância da classe BluetoothAdapter, que pode ser obtida através do método estático getDefaultAdapter() – como podemos observar na Listagem 2. Caso esse método retorne null, quer dizer que o aparelho não tem suporte a Bluetooth.
Listagem 2. Verificando o suporte à API.
1. BluetoothAdapter adaptador =
BluetoothAdapter.getDefaultAdapter();
2. if (adaptador == null) {
3. // Aparelho não suporta Bluetooth
4. }
Depois de obter a instância do adaptador, é necessário checar se o aparelho está com o Bluetooth ativado. Deixar o Bluetooth do aparelho ligado consome bateria, sendo assim, é interessante manter os recursos não utilizados desligados, e ativá-los apenas quando necessário. A Listagem 3 apresenta como a API nos permite checar se o Bluetooth está ativo, e caso não esteja, solicitar ao usuário que o ative.
Listagem 3. Deixando o aparelho visível.
1. if (!adaptador.isEnabled()) {
2. Intent enableBtIntent =
new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
3. startActivityForResult(enableBtIntent, BT_ATIVAR);
4. }
A solicitação para que o usuário ative o Bluetooth é feita através de uma Intent, que tem a ação ACTION_REQUEST_ENABLE ...