Określanie i monitorowanie stanu i typu dokowania

Urządzenia z Androidem można zadokować w różnych stacjach dokujących. Mogą to być samochodowe stacje dokujące, domowe stacje dokujące oraz stacje dokujące cyfrowe lub analogowe. Stan stacji dokującej jest zazwyczaj ściśle powiązany ze stanem ładowania, ponieważ wiele stacji dokujących zasila urządzenia zadokowane.

W stanie zadokowania aplikacja ma wpływ na szybkość aktualizacji telefonu. Możesz zwiększyć częstotliwość aktualizacji aplikacji z wiadomościami sportowymi, gdy znajduje się w stacji dokującej na komputerze, lub całkowicie wyłączyć aktualizacje, jeśli urządzenie jest zadokowane w samochodzie. Możesz też zmaksymalizować aktualizacje, gdy samochód jest zadokowany, jeśli usługa w tle aktualizuje informacje o natężeniu ruchu.

Stan stacji dokującej jest też transmitowany jako przyklejony Intent, co pozwala sprawdzić, czy urządzenie jest zadokowane, a jeśli tak, to w jaki sposób.

Określanie bieżącego stanu dokowania

Szczegóły stanu zadokowania są dodatkowe w transmisji przyklejonej działania ACTION_DOCK_EVENT. Ponieważ jest to element przyklejony, możesz wywołać registerReceiver(), przekazując w parametrze null jako odbiornik. Ten fragment kodu pokazuje, jak wykonać ten proces:

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

Bieżący stan dokowania możesz wyodrębnić z dodatkowego elementu 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;

Określanie bieżącego typu stacji dokującej

Jeśli urządzenie jest zadokowane, można je zadokować w jednym z 4 różnych typów stacji dokujących:

  • Samochód
  • Biurko
  • Niskopoziomowe biurko (analogowe)
  • Wysokiej klasy (cyfrowe) biurko

Dwie ostatnie opcje zostały wprowadzone tylko w interfejsie Android API na poziomie 11, dlatego jeśli interesuje Cię tylko typ stacji dokującej, a nie cyfrowy czy analogowy, dobrze jest sprawdzić wszystkie 3 typy biurek:

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;