Определение и отслеживание типа и состояния док-станции

Устройства Android можно подключать к различным док-станциям. К ним относятся автомобильные, домашние, цифровые и аналоговые док-станции. Состояние док-станции обычно тесно связано с состоянием зарядки, поскольку многие док-станции обеспечивают питание подключенных устройств.

Приложение влияет на частоту обновления телефона в режиме док-станции. Например, можно увеличить частоту обновлений приложения со спортивными новостями, когда устройство находится в настольной док-станции, или полностью отключить обновления, когда устройство находится в автомобильной док-станции. И наоборот, если фоновая служба обновляет информацию о загруженности дорог, то при подключении к автомобильной док-станции можно увеличить частоту обновлений.

Состояние док-станции также передается как закрепленное намерение Intent, что позволяет запрашивать, подключено ли устройство к док-станции и к какому типу док-станции.

Как определить текущее состояние док-станции

Сведения о состоянии док-станции включаются в качестве дополнительной информации в закрепленную трансляцию действия ACTION_DOCK_EVENT. Поскольку это закрепленное сообщение, вы можете вызвать registerReceiver(), передав null в качестве широковещательного приемника. Ниже показано, как это сделать.

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

Текущий статус подключения можно извлечь из дополнительного параметра 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;

Определить текущий тип док-станции

Если устройство подключено к док-станции, она может быть одного из четырех типов:

  • Автомобиль
  • Письменный стол
  • Простой (аналоговый) пульт
  • High-End (Digital) desk

Последние два варианта появились только в Android API уровня 11, поэтому рекомендуется проверять все три типа док-станций, если вас интересует только тип док-станции, а не то, является ли она цифровой или аналоговой:

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;