Dispositivos Android podem ser encaixados em diferentes tipos de bases. Isso incluem docas para carros, docks em casa e bases digitais ou analógicas. O estado da base normalmente está vinculado ao estado de carregamento, porque muitas bases fornecem energia para os dispositivos encaixados.
O app afeta a taxa de atualização do smartphone no estado de base. É possível aumentar a frequência de atualização de um app de notícias esportivas quando ele está na base do computador ou desativar completamente as atualizações se o dispositivo está na base para carro. Por outro lado, é possível maximizar as atualizações quando o dispositivo estiver na base para carro 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 consultar se o dispositivo está encaixado e em que tipo de base.
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 ela é fixa, você pode chamar
registerReceiver()
,
transmitindo null
como o broadcast receiver. O snippet a seguir
mostra como concluir esse processo:
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);
O estado de ancoragem atual pode ser extraído do
extra 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;
Determinar o tipo de base atual
Se um dispositivo estiver na base, ele poderá ser em qualquer um dos quatro tipos de base abaixo:
- Carro
- Mesa
- Mesa de baixa capacidade (analógica)
- Mesa de alta tecnologia (digital)
As duas últimas opções só foram introduzidas no nível 11 da API do Android. Portanto, é recomendado verificar os três tipos de base quando o interesse for apenas no tipo de base, e não se ela é digital ou analógica especificamente:
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;