# Configuración de permisos en Android

El SDK de Get Mini Android requiere permisos específicos de Android para comunicarse con los dispositivos PIN pad Bluetooth y conectarse a los servicios web de Redsys. Esta guía explica qué permisos son necesarios y cómo declararlos en el manifiesto de tu aplicación.

## Permisos requeridos

El SDK Android requiere los siguientes permisos para funcionar correctamente:

### Permisos de Bluetooth

Para gestionar y establecer conexiones Bluetooth con el PIN pad de Get Mini:

* `android.permission.BLUETOOTH`
* `android.permission.BLUETOOTH_ADMIN`

### Permisos de red

Para enviar solicitudes de autorización a los servicios web de Redsys:

* `android.permission.INTERNET`
* `android.permission.ACCESS_NETWORK_STATE`

---

## Declarar permisos en AndroidManifest.xml

Añade los siguientes permisos a tu archivo `AndroidManifest.xml` dentro de la etiqueta `<manifest>`:

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Permisos de Bluetooth para comunicación con el PIN pad -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    <!-- Permisos de red para los servicios web -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application ...>
        <!-- Configuración de tu aplicación -->
    </application>
</manifest>
```

Estos son los permisos mínimos requeridos según lo especificado en la documentación del SDK iTPV-PC. Sin estos permisos, el SDK no podrá:

* Descubrir y conectarse a dispositivos PIN pad Bluetooth
* Transmitir datos de transacciones a los servicios web de Redsys
* Recibir respuestas de autorización

---

## Comportamiento de permisos por versión de Android

### Android 5.1 y anteriores (API 22 y anteriores)

Todos los permisos se otorgan automáticamente en el momento de la instalación. No se requieren solicitudes de permisos en tiempo de ejecución.

### Android 6.0 y posteriores (API 23+)

Los permisos peligrosos deben solicitarse en tiempo de ejecución. Para el SDK iTPV-PC:

* **Permisos de Bluetooth** (`BLUETOOTH`, `BLUETOOTH_ADMIN`) se consideran permisos normales y se otorgan automáticamente.
* **Permisos de red** (`INTERNET`, `ACCESS_NETWORK_STATE`) también son permisos normales y se otorgan automáticamente.

Como resultado, **no se requieren solicitudes de permisos en tiempo de ejecución** para la funcionalidad principal del SDK iTPV-PC en cualquier versión de Android, ya que todos los permisos requeridos están clasificados como permisos normales por la plataforma Android.

---

## Consideraciones adicionales para versiones modernas de Android

### Android 12+ (API 31+)

Si tu aplicación tiene como objetivo Android 12 o superior, puede encontrar nuevos requisitos de permisos de Bluetooth introducidos por la plataforma:

* `BLUETOOTH_SCAN`: Requerido para descubrir dispositivos Bluetooth cercanos.
* `BLUETOOTH_CONNECT`: Requerido para conectarse a dispositivos Bluetooth vinculados.

Aunque la documentación del SDK iTPV-PC (versión 2.5.3) no requiere explícitamente estos permisos, los dispositivos Android 12+ pueden exigirlos dependiendo de su versión de SDK objetivo y los detalles de implementación.

**Si encuentras problemas de conectividad Bluetooth en dispositivos Android 12+**, considera añadir estos permisos a tu manifiesto:

```xml
<!-- Opcional: Permisos de Bluetooth para Android 12+ -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
```

Y solicítalos en tiempo de ejecución antes de inicializar la conexión con el PIN pad:

```kotlin
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    val permissions = arrayOf(
        Manifest.permission.BLUETOOTH_SCAN,
        Manifest.permission.BLUETOOTH_CONNECT
    )
    requestPermissions(permissions, BLUETOOTH_PERMISSION_REQUEST_CODE)
}
```

### Permiso de ubicación (Android 6.0 - 11)

En las versiones de Android 6.0 a 11, el escaneo de Bluetooth LE puede requerir el permiso de ubicación (`ACCESS_FINE_LOCATION`) aunque el SDK no utilice la funcionalidad GPS. Este es un requisito de la plataforma, no un requisito del SDK.

**Si encuentras problemas de escaneo Bluetooth en dispositivos Android 6.0-11**, es posible que debas añadir:

```xml
<!-- Opcional: Requerido para escaneo Bluetooth LE en Android 6-11 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
    android:maxSdkVersion="30" />
```

Y solicítalo en tiempo de ejecución en las versiones de Android afectadas.

---

## Solución de problemas

**Fallo en la conexión Bluetooth**

* Verifica que los cuatro permisos requeridos estén declarados en el `AndroidManifest.xml`.
* Asegúrate de que el Bluetooth esté activado en el dispositivo Android.
* Confirma que el PIN pad esté encendido y en modo de emparejamiento.
* Comprueba que el número de serie del PIN pad coincida con la configuración.

**Fallo en la autorización de red**

* Verifica que el permiso `INTERNET` esté declarado.
* Comprueba la conectividad de red en el dispositivo.
* Confirma que el entorno configurado sea el correcto (integración, certificación o producción).
* Verifica que las credenciales del terminal sean válidas.

**Problemas específicos de Android 12+**

* Añade los permisos `BLUETOOTH_SCAN` y `BLUETOOTH_CONNECT`.
* Solicita estos permisos en tiempo de ejecución antes de la inicialización del PIN pad.
* Asegúrate de que los usuarios otorguen el permiso de "Dispositivos cercanos" cuando se les solicite.

---

## Próximos pasos

* [Añadir el SDK a tu Proyecto](/es/get-mini/android-sdk/first-steps/add-sdk-to-project): Incluye la biblioteca iTPV-PC en tu aplicación Android.
* [Inicio Rápido: Tu Primera Venta](/es/get-mini/android-sdk/first-steps/android-sdk-quickstart): Inicializa el SDK y procesa una transacción de prueba.
* [Ciclo de Vida de la Transacción](/es/get-mini/android-sdk/core-concepts/transaction-lifecycle): Comprende las etapas del flujo de pago.