Determinar e monitorar o estado e o tipo de encaixe na base

Dispositivos com tecnologia Android podem ser encaixados em diferentes tipos de bases. Eles incluem docks para carro, docks para casa e docks digitais ou analógicos. Normalmente, o estado da base está vinculado ao estado de carregamento, já que muitas bases fornecem energia aos dispositivos ancorados.

O app afeta a taxa de atualização do smartphone no estado da base. É possível aumentar a frequência de atualização de um app de notícias esportivas quando ele estiver na base do computador ou desativar as atualizações completamente se o dispositivo estiver na base para carro. Por outro lado, você pode maximizar as atualizações enquanto o carro está na base se o serviço em segundo plano estiver atualizando as condições de trânsito.

O estado da base também é transmitido como uma Intent fixa, permitindo que você consulte se o dispositivo está na base e em que tipo de base, se estiver.

Determinar o estado atual de encaixe na base

Os detalhes do estado da base são incluídos como um extra em uma transmissão fixa da ação ACTION_DOCK_EVENT. Como ele é fixo, você pode chamar registerReceiver(), transmitindo null como o broadcast receiver. O snippet a seguir mostra como concluir esse processo:

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

O status de ancoragem atual pode ser extraído do extra 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;

Determinar o tipo de base atual

Se um dispositivo estiver na base, ele poderá ser encaixado em qualquer um destes quatro tipos de base diferentes:

  • Carro
  • Mesa
  • Mesa de baixo custo (analógica)
  • Mesa de alta tecnologia (digital)

As duas últimas opções só são introduzidas no nível 11 da API do Android. Portanto, é recomendável verificar os três tipos de espaço de trabalho quando você está interessado apenas no tipo de base, em vez de ser especificamente digital ou analógica:

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;