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

Los dispositivos con Android se pueden conectar a distintos tipos de conectores. Entre estos, se incluyen conectores para autos, para el hogar y digitales o analógicos. Por lo general, el estado del conector está vinculado al estado de carga, ya que muchos conectores cargan los dispositivos en la estación de carga.

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

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

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 persistente 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 de la conexión del elemento 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 estar en cualquiera de los siguientes cuatro tipos de conector:

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

Las últimas dos opciones solo se introducen en el nivel de API 11 de Android, por lo que te recomendamos que verifiques los tres tipos de escritorio cuando solo te interese el tipo de conector en lugar de ser digital o analógico:

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;