Cómo determinar y supervisar el tipo y el estado del conector

Los dispositivos Android se pueden conectar a varios tipos diferentes de conectores. Por ejemplo, se pueden usar conectores para autos o para el hogar, tanto digitales como analógicos. Por lo general, el estado del conector suele estar vinculado con el estado de carga, ya que muchos conectores cargan los dispositivos mientras están conectados.

El modo en el cual el estado del conector del teléfono afecta a la frecuencia de actualización depende de tu app. Puedes optar por aumentar la frecuencia de actualización de una app de noticias deportivas cuando el dispositivo se enchufa en un conector de escritorio, o por inhabilitar las actualizaciones completamente si se enchufa en un conector para autos. Por el contrario, puedes maximizar las actualizaciones cuando el dispositivo esté conectado a un auto 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 o no y, si lo está, determinar el tipo de conector.

Cómo determinar el estado actual del conector

Los detalles del estado del conector se incluyen como información adicional en la emisión fija de la acción ACTION_DOCK_EVENT. Como es fija, simplemente 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 desde 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 = 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 estarlo en cualquiera de estos cuatro tipos de conectores:

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

Ten en cuenta que las últimas dos opciones se introdujeron en Android únicamente en el nivel de API 11. Por lo tanto, te recomendamos que compruebes las tres opciones solo cuando quieras saber qué tipo de conectores son y no si son digitales o analógicos:

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;