BluetoothAdvertiserWiloc

class BluetoothAdvertiserWiloc(val context: Context, val externalScope: CoroutineScope? = null)

Gestor avanzado de Bluetooth Low Energy (BLE) Advertising para aplicaciones de salud.

Esta clase proporciona una interfaz robusta para transmitir datos de salud usando Bluetooth LE, con soporte especial para:

  • Extended Advertising: Para mayor alcance (hasta 50m con PHY_CODED)

  • Actualización dinámica: Cambio de datos sin reiniciar advertising

  • Gestión de estados: Control automático de errores y reconexiones

  • Modo Legacy: Compatibilidad con dispositivos antiguos

Características Principales

Extended Advertising (Android 8.0+)

  • Soporte para PHY_CODED (largo alcance)

  • Máxima potencia de transmisión (hasta +1 dBm)

  • Paquetes de hasta 251 bytes vs 31 bytes en Legacy

  • Actualización de datos sin reiniciar advertising

Gestión de Estados

IDLE → STARTING → ACTIVE → STOPPING → STOPPED
↑ ↓
←──── ERROR ←────┘

Configuración Adaptativa

  • Detección automática de capacidades del dispositivo

  • Fallback a modo Legacy si Extended no está disponible

  • Optimización de parámetros según el perfil de uso

Ejemplo de Uso

val advertiser = BluetoothAdvertiserWiloc(context)

// Configurar para emergencia (máximo alcance)
val config = AdvertisingConfig(
intervalMs = 250,
txPowerLevel = AdvertisingSetParameters.TX_POWER_HIGH,
useExtendedAdvertising = true
)

// Datos de salud
val healthData = HealthAdvertisementData(
deviceId = "device123",
heartRate = 75,
temperature = 36.5f
)

// Iniciar advertising
if (advertiser.startAdvertising(healthData, config)) {
// Actualizar datos dinámicamente
advertiser.updateAdvertisingData(newHealthData)
}

Requisitos del Sistema

Permisos Necesarios

  • Android 12+: BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT

  • Android <12: BLUETOOTH, BLUETOOTH_ADMIN, ACCESS_FINE_LOCATION

Capacidades de Hardware

  • Bluetooth LE compatible

  • Extended Advertising (opcional, Android 8.0+)

  • PHY_CODED (opcional, para largo alcance)

Author

WiLoc Team

Since

1.0.0

Parameters

context

Contexto de la aplicación

externalScope

Scope opcional para integración con ViewModels

See also

AdvancedBluetoothConfig

Constructors

Link copied to clipboard
constructor(context: Context, externalScope: CoroutineScope? = null)

Types

Link copied to clipboard
data class AdvertisingConfig(val intervalMs: Int = 500, val txPowerLevel: Int = AdvertisingSetParameters.TX_POWER_HIGH, val useExtendedAdvertising: Boolean = true)

Configuración para el advertising con valores por defecto optimizados.

Link copied to clipboard
object Companion
Link copied to clipboard
private sealed class InternalState

Estados internos del advertiser para gestión robusta de estados.

Properties

Link copied to clipboard
private val _advertisingSetInfo: <Error class: unknown class>

Información del advertising set activo

Link copied to clipboard
private val _advertisingStatus: <Error class: unknown class>

Estado público observable del status

Link copied to clipboard
private val _internalState: <Error class: unknown class>

Estado interno del advertiser

Link copied to clipboard
private val _isAdvertising: <Error class: unknown class>

Estado público observable de advertising

Link copied to clipboard
private val _lastAdvertisedData: <Error class: unknown class>

Últimos datos enviados por advertising

Link copied to clipboard
private val advertiserScope: <Error class: unknown class>

Scope para corrutinas del advertiser

Link copied to clipboard
private val advertisingSetCallback: BluetoothAdvertiserWiloc.<no name provided>

Callback para manejar eventos del Advertising Set.

Link copied to clipboard
val advertisingSetInfo: StateFlow<String?>
Link copied to clipboard
val advertisingStatus: StateFlow<String?>
Link copied to clipboard

Adaptador de Bluetooth

Link copied to clipboard

Advertiser de Bluetooth LE

Link copied to clipboard

Gestor de Bluetooth del sistema

Link copied to clipboard
private val context: Context
Link copied to clipboard

Advertising Set activo (para Extended Advertising)

Link copied to clipboard
private val externalScope: CoroutineScope? = null
Link copied to clipboard
val isAdvertisingFlow: StateFlow<Boolean>
Link copied to clipboard

Flag atómico para prevenir condiciones de carrera

Link copied to clipboard
Link copied to clipboard

Últimos parámetros utilizados

Functions

Link copied to clipboard

Construye los datos de advertising.

Link copied to clipboard

Construye los parámetros de advertising basándose en la configuración.

Link copied to clipboard
fun cleanup()

Limpia todos los recursos del advertiser.

Link copied to clipboard
private fun forceStopState()

Fuerza el estado de detención cuando no se puede llamar a la API.

Link copied to clipboard
private fun getAdvertisingError(errorCode: Int): String

Convierte un código de error de advertising a mensaje legible.

Link copied to clipboard

Obtiene información detallada del estado actual.

Link copied to clipboard

Verifica si se tienen todos los permisos necesarios para Bluetooth.

Link copied to clipboard

Inicializa y registra las características del dispositivo.

Link copied to clipboard

Verifica si Extended Advertising está soportado.

Link copied to clipboard

Verifica si PHY Coded está soportado.

Link copied to clipboard

Realiza el inicio del advertising de forma asíncrona.

Link copied to clipboard
private fun setupStateCollection()

Configura la colección de estados internos y su mapeo a estados públicos.

Link copied to clipboard

Inicia el advertising con los datos de salud especificados.

Link copied to clipboard

Detiene el advertising activo.

Link copied to clipboard
private suspend fun stopAdvertisingInternal()

Detiene el advertising internamente.

Link copied to clipboard

Actualiza los datos del advertisement sin reiniciar.

Link copied to clipboard
fun updateAdvertisingParameters(intervalMs: Int, txPowerLevel: Int): Boolean

Actualiza los parámetros de advertising (solo Extended Advertising).

Link copied to clipboard

Valida las precondiciones necesarias para iniciar advertising.