Antes de continuar, consulte as diretrizes para gerar distrações.
Esta página descreve as regras de restrições da experiência do usuário (UX) do carro que você pode usar para criar várias configurações de regras de Restrições de UX (por exemplo, União Europeia versus Japão) e, em seguida, determinar qual conjunto de regras aplicar no ambiente de execução. Para mais informações, consulte CarUxRestrictions.
O serviço Restrições de UX para carros permite que os desenvolvedores definam novas restrições de UX para carros. configuração do Terraform. Caso um desenvolvedor queira modificar as regras de restrição (por exemplo, para obedecer às padrões de segurança), o desenvolvedor pode usar a API para definir a nova configuração.
A API que define 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 carregado quando o serviço de restrições de UX é reiniciado e o carro está no modo "Estacionado". O serviço de motorista garante que o carro esteja no modo "Estacionado" antes de recarregar a nova configuração.
Além do novo método de serviço Restrições de UX, são fornecidas APIs para construir o configuração do Terraform. O estado de seleção de marcha e velocidade é convertido em um dos três estados de direção:
- Estacionado. Gear no Park.
- Inativo. O veículo não está estacionado, e a velocidade é zero.
- Mudança. A marcha não está no estacionamento e a velocidade não está zero.
Para saber como os apps consomem o estado de condução de um carro e as restrições de UX correspondentes, consulte Consumo de restrições de UX e estado de condução do carro.
Configuração de restrição com base nos estados da unidade
Para evitar a distração do motorista, o Android mapeia o estado do condutor com um conjunto de restrições de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Estacionado. Sem restrições.
- Inativo. Sem tela de vídeo e de configuração.
- Mudança. Totalmente restrito (todas as restrições são obrigatórias).
O mapeamento ilustrado acima é predeterminado e configurado como um recurso XML. A
/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 conduçã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 uma restrição
configurações para várias telas, inclua a tag RestrictionMapping
com o
averagePort dessa tela. As restrições apropriadas são aplicadas automaticamente a cada
exibição. No exemplo a seguir, as telas com IDs de portas físicas 1 e 2 têm diferentes
de configuração:
<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 selecionar qualquer nome para o modo, como adolescente. No exemplo a seguir, Restrições diferentes foram configuradas para os modos padrão e passageiro. Antes, apenas o modo passageiro era compatível:
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>Você pode usar a API para definir qualquer nome de string para o modo. Por exemplo, o Método
setRestrictionMode(@NonNull String mode)
em CarUxRestrictionsManager.
Antes, você usaria o método
Método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
em
CarUxRestrictionsManager).
APIs CarUxRestrictionsConfiguration
Restrições com CarUxRestrictionsConfiguration
A nova classe CarUxRestrictionsConfiguration
é mapeada individualmente para o XML atual
de configuração do Terraform. CarUxRestrictionsConfiguration
pode ser construída com CarUxRestrictions.
, que valida a configuração
em 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 o próximo percurso 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 é passada, 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, as restrições de UX contém dois conjuntos de configurações:
- Produção. Essa configuração é opcional, mas muitas vezes está presente. A UX O serviço de restrições lê essa configuração ao ser iniciado.
- Preparado. Também opcional, esta configuração não afeta as restrições de UX e é promovido para produção quando o automóvel é iniciado e o carro está estacionado.
Figura 1. Configuração de produção
Resolver falhas
Até que informações sobre o estado de condução sejam recebidas do CarPropertyManager (por exemplo, durante inicialização), as restrições de UX não serão aplicadas. O sistema funciona como se o estado de condução fosse Estacionado.
Se a leitura de uma configuração salva falhar (por exemplo, nos resultados de SetupNotFoundException), o O serviço de restrições de UX volta ao modo codificado e totalmente restrito:
// 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 exibidas no diagrama de design a seguir:
Figura 2. Como acionar interações de estado
Propriedades usadas para derivar o estado de condução
Use os três VehiclePropertyIds
a seguir para derivar o estado de direção:
APIs disponíveis para apps
O código pode ser encontrado nos seguintes locais:
Código | Local |
---|---|
CarUxRestrictionsManager e APIs públicas para registrar mudanças de restrição de UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions e 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 de condução. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Para simular estados de direção, consulte Testes.