Determinare e monitorare lo stato e il tipo di dock

I dispositivi Android possono essere agganciati a diversi tipi di basi. Sono inclusi quelli per auto, per uso domestico e digitali o analogici. Lo stato del dock è in genere strettamente collegato allo stato di ricarica, dato che molte basi forniscono l'alimentazione ai dispositivi agganciati alla base.

L'app influisce sulla frequenza di aggiornamento dello smartphone nello stato del dock. Puoi aumentare la frequenza di aggiornamento di un'app di notizie sportive quando è nel dock per desktop oppure disattivare completamente gli aggiornamenti se il dispositivo è agganciato al dock dell'auto. Al contrario, puoi massimizzare gli aggiornamenti quando l'auto è agganciata alla base se il servizio in background aggiorna le condizioni del traffico.

Lo stato della base viene trasmesso anche come valore staticoIntent, perché tu possa eseguire query per sapere se il dispositivo è agganciato alla base e a quale tipo di base.

Determina lo stato attuale di docking

I dettagli dello stato del dock sono inclusi come extra in una trasmissione fissa dell'azione ACTION_DOCK_EVENT. Poiché è permanente, puoi chiamare registerReceiver(), passando null come ricevitore di trasmissione. Il seguente snippet mostra come completare questa procedura:

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);

Puoi estrarre lo stato corrente dell'aggancio dall'extra 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;

Determina il tipo di dock attuale

Se un dispositivo è agganciato alla base, può essere agganciato a uno dei seguenti quattro diversi tipi di basi:

  • Auto
  • Scrivania
  • Low-End (analogico)
  • Scrivania di fascia alta (digitale)

Le ultime due opzioni vengono introdotte solo nel livello API Android 11, perciò è buona norma controllare tutti e tre i tipi di scrivanie se ti interessa solo il tipo di dock, anziché essere digitale o analogico specificamente:

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;