Dispositivos Android podem ser ancorados em diversos tipos de bases. Isso pode incluir bases no carro ou 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 ancorados.
A forma como o estado da base do telefone afeta a taxa de atualização depende do aplicativo. É possível optar pelo aumento da frequência de um aplicativo de um centro esportivo quando o mesmo está na base do desktop ou desativar completamente as atualizações se o dispositivo está na dock do carro. Por outro lado, é possível maximizar as atualizações quando está na base do carro se o serviço de segundo plano está atualizando as condições do tráfego.
O estado da base também é transmitido como uma Intent fixa, permitindo
consultar se o dispositivo está ancorado ou não e em que tipo de base.
Determinar o estado atual da ancoragem
Os detalhes do estado da base são incluídos como um extra na transmissão fixa da ação ACTION_DOCK_EVENT. Por ser uma fixação, não é preciso registrar um
BroadcastReceiver. Basta chamar registerReceiver() passando null como
o receptor de transmissão, como mostrado no snippet a seguir.
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:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1); boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
Determinar o tipo de base atual
Se um dispositivo está ancorado, isso pode acontecer em um dos quatro tipos diferentes de base:
- Carro
- Mesa
- Mesa de baixa capacidade (analógica)
- Mesa de alta capacidade (digital)
Observe que as duas últimas opções só foram introduzidas no Android no nível da API 11, portanto, é uma prática recomendada conferir todas as três opções, onde o interesse é no tipo de base, não se ela é digital ou analógica, especificamente:
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;
Monitorar mudanças no estado ou tipo de base
Sempre que o dispositivo está ancorado ou não, a ação ACTION_DOCK_EVENT é transmitida. Para monitorar alterações
no estado da base do dispositivo, basta registrar um receptor de transmissão no manifesto do aplicativo,
como mostrado no snippet abaixo:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
É possível extrair o tipo e o estado da base dentro da implementação do receptor usando as mesmas técnicas descritas na etapa anterior.