Determinare e monitorare lo stato e il tipo di dock

I dispositivi Android possono essere agganciati a diversi tipi di dock. tra cui dock per auto, dock per casa e dock digitali o analogici. In genere, lo stato del dock è strettamente collegato allo stato di ricarica, poiché molti dock forniscono alimentazione ai dispositivi agganciati alla base.

L'app influisce sulla frequenza di aggiornamento del telefono quando il telefono è inserito nel dock. Puoi aumentare la frequenza di aggiornamento di un'app di notizie sportive quando è nel dock della scrivania o disattivare completamente gli aggiornamenti se il dispositivo è agganciato al dock in auto. Al contrario, puoi massimizzare gli aggiornamenti quando l'auto è agganciata al dock se il servizio in background aggiorna le condizioni del traffico.

Lo stato del dock viene anche trasmesso come fisso Intent, che ti consente di chiedere se il dispositivo è inserito nel dock e in quale tipo di dock.

Determinare lo stato di docking attuale

I dettagli sullo stato del dock sono inclusi come extra in una trasmissione persistente dell'azione ACTION_DOCK_EVENT. Poiché è fisso, puoi chiamare registerReceiver(), trasmettendo null come ricevitore della trasmissione. Lo snippet seguente 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 collegamento attuale dal EXTRA_DOCK_STATE extra:

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 è inserito nel dock, può essere inserito in uno dei seguenti quattro diversi tipi di dock:

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

Le ultime due opzioni sono introdotte solo nel livello API Android 11, quindi è buona norma controllare tutti e tre i tipi di scrivanie quando ti interessa solo il tipo di dock, anziché essere digitale o analogico in particolare:

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;