Determinare e monitorare lo stato e il tipo di dock

I dispositivi Android possono essere agganciati a diversi tipi di dock. Questi sono inclusi quelli per auto, per l'uso domestico e digitali o analogici. Lo stato del dock è generalmente strettamente collegato allo stato di ricarica, in quanto molte basi di ricarica forniscono sui 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 del desktop oppure disattivare completamente gli aggiornamenti se il dispositivo è agganciato al dock dell'auto. Al contrario, puoi massimizza gli aggiornamenti quando l'auto è agganciata al dock se il servizio in background è in fase di aggiornamento condizioni del traffico.

Lo stato del dock viene inoltre trasmesso come Intent, che ti consente di chiedere se il dispositivo è agganciato alla base e in quale tipo di base è agganciata Ecco.

Determina lo stato attuale di docking

I dettagli dello stato del dock sono inclusi come extra in trasmissione permanente ACTION_DOCK_EVENT un'azione. Poiché è fisso, puoi chiamare registerReceiver(), passando null come broadcast receiver. 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 di docking corrente dal Extra di 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 in uno dei seguenti quattro dispositivi: diversi tipi di basi:

  • Auto
  • Scrivania
  • Scrivania di fascia bassa (analogica)
  • Scrivania di fascia alta (digitale)

Le ultime due opzioni vengono introdotte soltanto con il livello API Android 11, quindi è buona norma controllare tutti e tre i tipi di scrivanie quando ti interessano solo il tipo di base invece di essere digitale o analogica nello specifico:

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;