Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Подключаемся к док-станции

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

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

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

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


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

Сведения о текущем состоянии подключения к док-станции можно извлечь из дополнительных данных EXTRA_DOCK_STATE:


int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

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

  • автомобильная;
  • настольная;
  • настольная с минимальным набором функций (аналоговая) (API 11);
  • настольная с широким набором функций (цифровая) (API 11)

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


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;

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


<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>

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

Источник: Determining and Monitoring the Docking State and Type

Реклама