Cómo determinar y supervisar el tipo y el estado de conexión

Los dispositivos con Android se pueden conectar a diferentes tipos de estaciones de carga. Por ejemplo, se pueden usar conectores para autos, para el hogar y digitales o analógicos. Por lo general, el estado de la estación de carga está estrechamente vinculado con el de carga, ya que muchas estaciones proporcionan energía a los dispositivos conectados.

Tu app afecta la frecuencia de actualización del teléfono en el estado de la estación de carga. Puedes aumentar la frecuencia de actualización de una app de noticias deportivas cuando el dispositivo se enchufa en un conector de escritorio, o inhabilitar las actualizaciones por completo si se enchufa en un conector para autos. Por el contrario, puedes maximizar las actualizaciones cuando el dispositivo está conectado a un vehículo si tu servicio en segundo plano actualiza las condiciones de tráfico.

El estado del conector también se transmite como un Intent fijo, lo que te permite consultar si el dispositivo está conectado y, si lo está, en qué tipo de conector.

Cómo determinar el estado actual de conexión

Los detalles del estado del conector se incluyen como información adicional en una transmisión fija de la acción ACTION_DOCK_EVENT. Como es persistente, puedes llamar a registerReceiver() y pasar null como el receptor de emisión. En el siguiente fragmento, se muestra cómo completar este proceso:

Kotlin

val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Java

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

Puedes extraer el estado actual del conector de la información adicional EXTRA_DOCK_STATE:

Kotlin

val dockState: Int = dockStatus?.getIntExtra(EXTRA_DOCK_STATE, -1) ?: -1
val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED

Java

int dockState -1;
if (dockStatus != null) {
  dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1);
}
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

Cómo determinar el tipo de conector actual

Si un dispositivo está conectado, puede hacerlo en cualquiera de los siguientes cuatro tipos de conectores:

  • Car
  • Escritorio
  • Escritorio de gama baja (analógica)
  • Escritorio de gama alta (digital)

Las últimas dos opciones solo se introdujeron en el nivel de API 11 de Android. Por lo tanto, te recomendamos que compruebes los tres tipos de estaciones de trabajo cuando solo te interese el tipo de estación de carga en lugar de saber si es digital o analógica:

Kotlin

val isCar: Boolean = dockState == EXTRA_DOCK_STATE_CAR
val isDesk: Boolean = dockState == EXTRA_DOCK_STATE_DESK
        || dockState == EXTRA_DOCK_STATE_LE_DESK
        || dockState == EXTRA_DOCK_STATE_HE_DESK

Java

boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
                 dockState == EXTRA_DOCK_STATE_HE_DESK;