Antes de continuar, leia as Diretrizes sobre distrações ao dirigir.
Esta página descreve as regras de restrições de experiência do usuário (UX) do carro que podem ser usadas para criar várias configurações de regras de restrições de UX (por exemplo, União Europeia x Japão) e, em seguida, determinar qual conjunto de regras será aplicado no momento da execução. Para mais informações, consulte CarUxRestrictions.
O serviço de restrições de UX do carro permite que os desenvolvedores definam uma nova configuração de restrições de UX do carro. Se um desenvolvedor quiser modificar as regras de restrição (por exemplo, para obedecer a padrões de segurança locais), ele poderá usar a API para definir a nova configuração.
A API para definir a configuração persiste apenas na nova configuração. Em outras palavras, a configuração não entra em vigor imediatamente. Em vez disso, a nova configuração é carregada quando o serviço de restrições de UX é reiniciado e o carro está em "Estacionar". O serviço de carro garante que o carro esteja em "Estacionamento" antes de recarregar a nova configuração.
Além do novo método de serviço de restrições de UX, as APIs são fornecidas para criar a configuração. O estado da seleção de marcha e da velocidade é convertido em um dos três estados de direção:
- Estacionado. Gear in Park.
- Inatividade. A marcha não está em "Estacionamento" e a velocidade é zero.
- Mover. A marcha não está em "Estacionamento" e a velocidade não é zero.
Para saber como os apps consomem o estado de direção de um carro e as restrições de UX correspondentes, consulte Como consumir o estado de direção de um carro e as restrições de UX.
Configuração de restrição com base nos estados da direção
Para evitar distrações, o Android mapeia o estado de direção para um conjunto de restrições de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Estacionado. Ilimitado.
- Inatividade. Nenhum vídeo e nenhuma tela de configuração.
- Mover. Restrição total (todas as restrições são obrigatórias).
O mapeamento ilustrado acima é predeterminado e configurado como um recurso XML. O
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
salva as regras na memória. Em seguida, o serviço mapeia o estado de direção atual para as restrições de UX
e transmite as restrições atuais para todo o sistema.
<!-- No restrictions when car is parked --> <DrivingState car:state="parked"> <Restrictions car:requiresDistractionOptimization="false" car:uxr="baseline"/> </DrivingState> <!-- Restrictions when car is idling --> <DrivingState car:state="idling"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video|no_config"/> </DrivingState> <!-- Restrictions for speed >= 0 m/s --> <DrivingState car:state="moving" car:minSpeed="0.0"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="fully_restricted"/> </DrivingState>
Configurações para várias telas
Por padrão, nenhuma restrição é aplicada a telas adicionais. Para criar configurações de restrição para várias telas, inclua a tag RestrictionMapping
com a porta física para essa tela. As restrições adequadas são aplicadas automaticamente a cada
tela. No exemplo abaixo, as telas com os IDs de porta físicos 1 e 2 têm configurações
diferentes:
<RestrictionMapping car:physicalPort="1"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/> </DrivingState> </RestrictionMapping> <RestrictionMapping car:physicalPort="2"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </RestrictionMapping>
Configurações para modos de restrição
Você pode escolher qualquer nome para o modo, como adolescente. No exemplo abaixo, diferentes restrições são configuradas para os modos padrão e passageiro. Anteriormente, apenas o modo passageiro era aceito:
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>
setRestrictionMode(@NonNull String mode)
no CarUxRestrictionsManager.
Anteriormente, você usava o
método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
no
CarUxRestrictionsManager.
APIs CarUxRestrictionsConfiguration
Restrições com CarUxRestrictionsConfiguration
A nova classe CarUxRestrictionsConfiguration
é mapeada 1:1 para o esquema de configuração XML
atual. A CarUxRestrictionsConfiguration
pode ser construída com CarUxRestrictions.
, que valida a configuração
no build().
new CarUxRestrictionsConfiguration.Builder() // Explicitly set restrictions for each driving state. .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED, /* requiresOptimization= */ false, /* restrictions= */ UX_RESTRICTIONS_BASELINE) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING, true, UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_FULLY_RESTRICTED) // Set restriction parameters. .setMaxStringLength(int max) .setMaxCumulativeContentItems(int max) .setMaxContentDepth(int max) // Build a new CarUxRestrictionsConfiguration. .build();
API CarUxRestrictionsManager
Defina CarUxRestrictionsConfiguration
para a próxima unidade com CarUxRestrictionsManager
. Esse método requer permissão,
Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Manter uma nova configuração de restrições de UX
Quando uma nova configuração é transmitida, o serviço de restrições de UX retorna um booleano para indicar se a nova configuração foi salva. Essa nova configuração só é usada quando a unidade principal integrada (IHU, na sigla em inglês) é reiniciada e o carro está estacionado. Internamente, o serviço de restrições de UX contém dois conjuntos de configurações:
- Produção. Embora opcional, essa configuração geralmente está presente. O serviço de restrições de UX lê essa configuração ao iniciar.
- Em etapas. Também opcional, essa configuração não tem efeito nas restrições de UX e é promovida para produção quando o serviço de carro começa e quando o carro está estacionado.
Figura 1. Configuração de produção
Lidar com falhas
Até que as informações do estado de direção sejam recebidas do CarPropertyManager (por exemplo, durante a inicialização), as restrições de UX não serão aplicadas. O sistema se comporta como se o estado de condução fosse "Estacionado".
Se a leitura de uma configuração salva falhar (por exemplo, resultados de SettingNotFoundException), o serviço de restrições de UX voltará ao modo totalmente restrito e codificado:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Estado de direção e restrições do usuário
O conteúdo a seguir descreve as interações mostradas no diagrama de design abaixo:
Figura 2. Interações com o estado de direção
Propriedades usadas para derivar o estado de direção
Use os três VehiclePropertyIds
a seguir para extrair o estado de direção:
APIs disponíveis para apps
O código está nos seguintes locais:
Código | Local |
---|---|
CarUxRestrictionsManager APIs públicas para registro de mudanças nas restrições de UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions Definição de restrições de UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
APIs do sistema para registrar mudanças de estado. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Para simular estados de direção, consulte Testes.