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

Les appareils Android peuvent être placés sur différents types de stations d'accueil. Ces qu'il s'agisse de stations d'accueil pour voitures, de stations d'accueil et de stations d'accueil numériques ou analogiques. L'état de la station d'accueil est En général, elle est étroitement liée à l'état de charge. En effet, de nombreuses stations fournissent l'alimentation appareils sur la station d'accueil.

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

L'état de la station d'accueil est également diffusé Intent, vous permettant de demander si l'appareil est sur la station d'accueil et dans quel type de station d'accueil donc.

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

Les détails concernant l'état de la station d'accueil sont inclus en supplément dans un diffusion persistante du ACTION_DOCK_EVENT action. Comme il est collant, vous pouvez appeler registerReceiver(), en transmettant null en tant que broadcast receiver. L'extrait 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 du EXTRA_DOCK_STATE supplément:

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 sur l'un des quatre types de stations d'accueil différents:

  • Voiture
  • Bureau
  • Bureau bas de gamme (analogique)
  • Bureau (numérique) haut de gamme

Les deux dernières options ne sont introduites que dans le niveau d'API Android 11. une bonne pratique pour vérifier les trois types de bureaux lorsque vous n'êtes intéressé que par le type de station d'accueil plutôt que d'être numérique ou analogique en particulier:

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;