Configurar o Bluetooth

Antes que seu app possa se comunicar por Bluetooth ou Bluetooth de baixa energia, você precisa verificar se o dispositivo oferece suporte ao Bluetooth e, em caso afirmativo, verificar se ele está ativado. Essa verificação só será necessária se o atributo android:required na entrada do arquivo de manifesto <uses-feature.../> estiver definido como false.

Se não houver suporte para o Bluetooth, desative todos os recursos do Bluetooth. Se houver suporte para o Bluetooth, mas ele estiver desativado, você poderá solicitar que o usuário ative o Bluetooth sem sair do app.

A primeira etapa é adicionar as permissões do Bluetooth ao arquivo de manifesto para usar as APIs abaixo.

Depois que as permissões forem aplicadas, a configuração do Bluetooth vai ser feita em duas etapas usando BluetoothAdapter:

  1. Acesse o BluetoothAdapter.

    O BluetoothAdapter é necessário para toda e qualquer atividade do Bluetooth. O BluetoothAdapter representa o próprio adaptador Bluetooth do dispositivo (o rádio Bluetooth). Para acessar um BluetoothAdapter, primeiro você precisa ter um Context. Use esse contexto para acessar uma instância do serviço do sistema BluetoothManager. Chamar BluetoothManager#getAdapter resultará em um objeto BluetoothAdapter. Se getAdapter() retornar nulo, o dispositivo não oferece suporte a Bluetooth.

    Por exemplo:

    Kotlin

    val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java)
    val bluetoothAdapter: BluetoothAdapter? = bluetoothManager.getAdapter()
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    

    Java

    BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class);
    BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    
  2. Ative o Bluetooth.

    Em seguida, é necessário garantir a ativação do Bluetooth. Chame isEnabled() para verificar se o Bluetooth está ativado. Se o método retornar "false", o Bluetooth será desativado. Para solicitar a ativação do Bluetooth, chame startActivityForResult(), transmitindo uma ação da intent ACTION_REQUEST_ENABLE. Essa chamada emite uma solicitação para ativar o Bluetooth pelas configurações do sistema (sem interromper o app).

    Por exemplo:

    Kotlin

    if (bluetoothAdapter?.isEnabled == false) {
      val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }
    

    Java

    if (!bluetoothAdapter.isEnabled()) {
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    

Uma caixa de diálogo será exibida solicitando a permissão do usuário para ativar o Bluetooth, conforme mostrado na Figura 1. Se o usuário conceder permissão, o sistema vai começar a ativar o Bluetooth, e o foco vai retornar ao app quando o processo for concluído (ou falhar).


Figura 1. Caixa de diálogo de ativação do Bluetooth.

A constante REQUEST_ENABLE_BT transmitida para startActivityForResult() é um número inteiro definido localmente que precisa ser maior ou igual a 0. O sistema transmite essa constante de volta para você na implementação onActivityResult() como o parâmetro requestCode.

Se a ativação do Bluetooth for bem-sucedida, sua atividade vai receber o código de resultado RESULT_OK no callback onActivityResult(). Se o Bluetooth não foi ativado devido a um erro (ou o usuário respondeu "Negar"), o código de resultado será RESULT_CANCELED.

Opcionalmente, o app também pode detectar a intent de transmissão ACTION_STATE_CHANGED, que o sistema transmite sempre que o estado do Bluetooth muda. Essa transmissão contém os campos extras EXTRA_STATE e EXTRA_PREVIOUS_STATE, contendo os estados novo e antigo do Bluetooth, respectivamente. Os valores possíveis para esses campos extras são STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF e STATE_OFF. Ouvir essa transmissão pode ser útil se o app precisar detectar mudanças feitas no estado do Bluetooth durante a execução.

Dica:a ativação da detecção do dispositivo ativa automaticamente o Bluetooth. Se você planeja ativar consistentemente a detecção do dispositivo antes de executar a atividade do Bluetooth, pule a etapa 2 das etapas anteriores.

Depois que o Bluetooth estiver ativado no dispositivo, você poderá usar o Bluetooth clássico e o Bluetooth de baixa energia.

Para o Bluetooth clássico, é possível encontrar dispositivos Bluetooth e conectar-se a dispositivos Bluetooth.

Para Bluetooth de baixa energia, é possível encontrar dispositivos BLE, conectar-se a um servidor GATT e transferir dados do BLE.