# Gestionar la conectividad Bluetooth

El Get Mini Android SDK gestiona la comunicación Bluetooth con los dispositivos PIN pad utilizando el `RedCLSPinPadManager`. Esta clase maneja el protocolo de conexión de bajo nivel a través de un flujo basado en interfaces, asegurando que tu aplicación sea informada de los eventos de conexión en tiempo real.

## Requisitos

Antes de gestionar la conectividad, asegúrate de:
1.  **Permisos**: tu aplicación tiene los permisos `BLUETOOTH` y `BLUETOOTH_ADMIN`.
2.  **Número de Serie**: Debes tener el número de serie del PIN pad al que deseas conectarte.
3.  **Datos del Terminal**: Necesitas el objeto `RedCLSTerminalData` obtenido en el login.

---

## Paso 1: Implementar la interfaz del PIN pad

Para recibir actualizaciones de conexión, tu clase (típicamente una Activity u otro componente que pueda proporcionar de forma segura un contexto de interfaz de usuario válido) debe implementar `RedCLSPinPadInterface`.

```kotlin
import redcls.itpvpc.interfaces.RedCLSPinPadInterface

class MyPaymentActivity : AppCompatActivity(), RedCLSPinPadInterface {

    override fun conexionPinPadRealizada() {
        Log.i("GetMini", "Conexión establecida. Ahora puede inicializar el PIN pad.")
        // Proceder a pinpadManager.inicializarPinpad()
    }

    override fun pinPadNoEncontrado() {
        Log.e("GetMini", "No se pudo encontrar o conectar al PIN pad.")
    }

    // ... implementar otros métodos como getContext(), seleccionMonedaPagoDCC(), etc.
}
```

---

## Paso 2: Configurar la conexión

Use `RedCLSConfigurationPinPadData` para especificar el tipo de conexión y el identificador del dispositivo. Para Bluetooth, el parámetro "name" debe ser el **Número de Serie** del PIN pad.

```kotlin
import redcls.itpvpc.data.RedCLSConfigurationPinPadData

val config = RedCLSConfigurationPinPadData(
    RedCLSConfigurationPinPadData.BLUETOOTH_CONNECTION,
    "12345678" // Número de Serie del PIN pad
)
```

---

## Paso 3: Establecer la conexión

Instancia el `RedCLSPinPadManager` usando tu implementación de interfaz, configuración y datos del terminal, luego activa la conexión.

```kotlin
import redcls.itpvpc.managers.RedCLSPinPadManager

val pinpadManager = RedCLSPinPadManager(this, config, merchantTerminalData)
pinpadManager.connectWithPinPad()
```

Esta llamada es asíncrona. El SDK te notificará a través de las devoluciones de llamada `conexionPinPadRealizada()` o `pinPadNoEncontrado()`.

---

## Paso 4: Mantenimiento y comprobaciones de estado

El SDK proporciona métodos para verificar el estado de la conexión o limpiar recursos cuando ya no son necesarios.

### Comprobar el estado de la conexión
Usa `isPinPadConnected()` para una verificación rápida, aunque tengas en cuenta que puede haber un ligero retraso en la detección de desconexiones de hardware.

```kotlin
if (pinpadManager.isPinPadConnected()) {
    // Proceder con las operaciones
}
```

### Cerrar conexiones
Para liberar recursos de Bluetooth al salir de tu flujo de pago:

```kotlin
pinpadManager.cerrarConexiones()
```

---

## Mejores prácticas

- **Conexión Inicial**: La primera conexión después de que el PIN pad se despierte del modo de suspensión puede tardar unos segundos. Maneja esto en tu interfaz de usuario con un indicador de carga.
- **Gestión del Número de Serie**: Si admites múltiples PIN pads, almacena tus números de serie en la configuración de tu aplicación para que el usuario no tenga que volver a ingresarlos.
- **Manejo del Contexto**: El método `getContext()` en tu interfaz **debe** devolver un contexto de interfaz de usuario válido (típicamente una Activity). Proporcionar un contexto de Service puede causar problemas con eventos relacionados con la interfaz de usuario (como la selección de DCC o las solicitudes de Firma).

## Próximos pasos

* [Inicializar el SDK](/es/get-mini/android-sdk/guides/initialize-sdk-lifecycle): Aprende cómo realizar la llamada `inicializarPinpad()` después de conectarse.
* [Crear una venta](/es/get-mini/android-sdk/guides/process-single-step-payments): Comienza a procesar transacciones.
* [Configuración de permisos en Android](/es/get-mini/android-sdk/first-steps/configure-android-permissions): Verifica la configuración de tu manifiesto.