Déterminer et surveiller l'état et le type de la station d'accueil

Les appareils Android peuvent être insérés dans différents types de stations d'accueil. Il s'agit, par exemple, de stations d'accueil pour voitures, stations d'accueil pour la maison, et stations numériques ou analogiques. L'état de la station d'accueil est généralement étroitement lié à l'état de charge, car de nombreuses stations alimentent les appareils sur la station d'accueil.

L'application a une incidence sur la fréquence de mise à jour du téléphone lorsqu'il est sur la station d'accueil. Vous pouvez augmenter la fréquence des mises à jour d'une application d'actualités sportives lorsqu'elle se trouve sur la station d'accueil pour ordinateur, ou désactiver complètement vos mises à jour si l'appareil est sur sa station d'accueil. À l'inverse, vous pouvez maximiser vos mises à jour lorsque la voiture est sur sa station d'accueil si votre service d'arrière-plan met à jour les conditions de trafic.

L'état de la station d'accueil est également diffusé sous forme de Intent persistante, ce qui vous permet de demander si l'appareil est sur la station d'accueil et dans quel type de station, le cas échéant.

Déterminer l'état actuel de la station d'accueil

Les détails de l'état de la station d'accueil sont inclus en tant que paramètres supplémentaires dans une annonce persistante de l'action ACTION_DOCK_EVENT. Comme il est persistant, vous pouvez appeler registerReceiver() en transmettant null en tant que broadcast receiver. L'extrait de code suivant montre comment effectuer ce processus:

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

Vous pouvez extraire l'état actuel de la station d'accueil à partir de l'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;

Déterminer le type de station d'accueil actuel

Si un appareil est sur sa station d'accueil, vous pouvez le placer dans l'un des quatre types de stations suivants:

  • Voiture
  • Bureau
  • Bureau analogique d'entrée de gamme
  • Bureau (numérique) haut de gamme

Les deux dernières options ne sont introduites que dans le niveau d'API Android 11. Il est donc recommandé de vérifier les trois types de bureaux uniquement lorsque vous vous intéressez uniquement au type de station plutôt qu'à son format numérique ou analogique spécifiquement:

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;