Configurar Bluetooth

Antes de que tu app pueda comunicarse a través de Bluetooth o Bluetooth de bajo consumo, debes verificar que Bluetooth sea compatible con el dispositivo y, de ser así, asegurarte de que esté habilitado. Ten en cuenta que esta verificación solo es necesaria si el atributo android:required en la entrada del archivo de manifiesto <uses-feature.../> se establece en false.

Si Bluetooth no es compatible, debes inhabilitar correctamente cualquier función de Bluetooth. Si Bluetooth es compatible, pero está inhabilitado, puedes solicitar que el usuario lo habilite sin salir de tu app.

El primer paso es agregar los permisos de Bluetooth a tu archivo de manifiesto para usar las siguientes APIs.

Una vez implementados los permisos, la configuración del Bluetooth se realiza en dos pasos mediante el BluetoothAdapter:

  1. Obtén el BluetoothAdapter.

    Se requiere el BluetoothAdapter para toda la actividad de Bluetooth. El BluetoothAdapter representa el propio adaptador de Bluetooth del dispositivo (la radio Bluetooth). Para obtener un BluetoothAdapter, primero debes tener un Context. Usa este contexto para obtener una instancia del servicio del sistema BluetoothManager. Si llamas a BluetoothManager#getAdapter, obtendrás un objeto BluetoothAdapter. Si getAdapter() muestra un valor nulo, significa que el dispositivo no es compatible con Bluetooth.

    Por ejemplo:

    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. Habilita Bluetooth.

    A continuación, debes asegurarte de que Bluetooth esté habilitado. Llama a isEnabled() para comprobar si Bluetooth está habilitado actualmente. Si este método muestra el valor "false", Bluetooth está inhabilitado. Para solicitar que se habilite Bluetooth, llama a startActivityForResult() y pasa una acción de intent ACTION_REQUEST_ENABLE. Esta llamada emite una solicitud para habilitar Bluetooth a través de la configuración del sistema (sin detener tu app).

    Por ejemplo:

    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);
    }
    

Aparecerá un cuadro de diálogo en el que se le solicitará permiso al usuario para habilitar Bluetooth, como se muestra en la Figura 1. Si el usuario otorga el permiso, el sistema comienza a habilitar Bluetooth y el foco vuelve a tu app cuando se completa (o falla) el proceso.


Figura 1: Diálogo de habilitación de Bluetooth

La constante REQUEST_ENABLE_BT que se pasa a startActivityForResult() es un número entero definido localmente que debe ser mayor o igual que 0. El sistema te devuelve esta constante en la implementación de onActivityResult() como el parámetro requestCode.

Si la habilitación de Bluetooth se realiza correctamente, tu actividad recibe el código de resultado RESULT_OK en la devolución de llamada onActivityResult(). Si Bluetooth no se habilitó debido a un error (o a que el usuario respondió "Rechazar"), el código de resultado será RESULT_CANCELED.

De manera opcional, tu app también puede escuchar el intent de transmisión ACTION_STATE_CHANGED, que el sistema emite cada vez que cambia el estado de Bluetooth. Esta transmisión contiene los campos adicionales EXTRA_STATE y EXTRA_PREVIOUS_STATE, que incluyen los estados de Bluetooth nuevo y antiguo, respectivamente. Los valores posibles para estos campos adicionales son STATE_TURNING_ON, STATE_ON, STATE_TURNING_OFF y STATE_OFF. La escucha de esta transmisión puede ser útil si tu app necesita detectar cambios en el tiempo de ejecución realizados en el estado de Bluetooth.

Nota: Cuando se habilita la visibilidad, se habilita Bluetooth automáticamente. Si planeas habilitar la visibilidad de dispositivos de manera constante antes de realizar una actividad de Bluetooth, puedes omitir el paso 2 de los pasos anteriores.

Una vez que se habilite Bluetooth en el dispositivo, puedes usar Bluetooth clásico y Bluetooth de bajo consumo.

Para la versión clásica de Bluetooth, puedes encontrar dispositivos Bluetooth y conectarte a dispositivos Bluetooth.

Para Bluetooth de bajo consumo, puedes encontrar dispositivos BLE, conectarte a un servidor GATT y transferir datos BLE.