Определение и мониторинг состояния и типа стыковки

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

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

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

Определить текущее состояние стыковки

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

Котлин

val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Ява

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

Вы можете извлечь текущий статус стыковки из дополнения EXTRA_DOCK_STATE :

Котлин

val dockState: Int = dockStatus?.getIntExtra(EXTRA_DOCK_STATE, -1) ?: -1
val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED

Ява

int dockState -1;
if (dockStatus != null) {
  dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1);
}
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

Определить текущий тип дока

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

  • Машина
  • Рабочий стол
  • Низкоклассный (аналоговый) пульт
  • Высококачественный (цифровой) письменный стол

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

Котлин

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

Ява

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;