Antes de continuar, revise as Diretrizes de distração ao dirigir .
Este artigo descreve as regras de Restrições de Experiência do Usuário de Carro (UX) 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 tempo de execução. Para obter mais informações, consulte CarUxRestrictions .
O serviço Car UX Restrictions permite que os desenvolvedores definam uma nova configuração de Car UX Restrictions. Caso um desenvolvedor queira modificar as regras de restrição (como para cumprir os padrões de segurança locais), o desenvolvedor pode 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 UX Restrictions é reiniciado e o carro está estacionado. O serviço de carro garante que o carro esteja estacionado antes de recarregar a nova configuração.
Além do novo método de serviço UX Restrictions, APIs são fornecidas para construir a configuração. O estado de seleção de marcha e velocidade é convertido em um dos três estados de condução:
- estacionado . Engrenagem no parque.
- Em marcha lenta . A marcha não está em Park e a velocidade é zero.
- Movendo-se . A marcha não está em Park e a velocidade não é zero.
Para saber como os aplicativos consomem o estado de direção de um carro e as restrições de UX correspondentes, consulte Consumindo o estado de direção do carro e as restrições de UX .
Configuração de restrição com base nos estados da unidade
Para evitar a distração do motorista, 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 . Irrestrito.
- Em marcha lenta . Sem vídeo e sem tela de configuração.
- Movendo-se . Totalmente restrito (todas as restrições são necessárias).
O mapeamento ilustrado acima é pré-determinado e configurado como um recurso XML. O
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
então salva as regras na memória. O serviço então mapeia o estado de condução atual para 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ários monitores
Por padrão, nenhuma restrição é aplicada a exibições adicionais. Para criar configurações de restrição para vários monitores, inclua a tag RestrictionMapping
com a porta física para esse monitor. As restrições apropriadas são aplicadas automaticamente a cada exibição. No exemplo a seguir, os monitores com IDs de porta física 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
Agora você pode selecionar qualquer nome para o modo, como adolescente . No exemplo a seguir, diferentes restrições são configuradas para os modos padrão e passageiro (anteriormente, apenas o modo passageiro era suportado:
<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. (Anteriormente, você usaria o método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
em CarUxRestrictionsManager).APIs de configuração CarUxRestrictions
Restrições com CarUxRestrictionsConfiguration
A nova classe CarUxRestrictionsConfiguration
é mapeada 1:1 para o esquema de configuração XML atual. CarUxRestrictionsConfiguration
pode ser construído com CarUxRestrictions. Builder
, 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
. Este método requer permissão, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Persistir em uma nova configuração de restrições de UX
Quando uma nova configuração é passada, o serviço UX Restrictions retorna um booleano para indicar se a nova configuração foi salva com sucesso. Esta nova configuração só é usada quando a unidade principal integrada (IHU) reinicia e o carro está estacionado. Internamente, o serviço UX Restrictions contém dois conjuntos de configurações:
- Produção . Embora opcional, essa configuração geralmente está presente. O serviço UX Restrictions lê essa configuração ao iniciar.
- Encenado . Também opcional, esta configuração não tem efeito nas Restrições de UX e é promovida para Produção quando o serviço do carro começa e quando o carro está estacionado.
Figura 1. Configuração de produção
Falhas de endereço
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 funcionará como se o estado de condução estivesse estacionado.
Se a leitura de uma configuração salva falhar (por exemplo, resultados de SettingNotFoundException), o serviço UX Restrictions volta para o modo totalmente restrito e codificado:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Estado de conduçã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. Interações do estado de direção
Propriedades usadas para derivar o estado de condução
Use os três VehiclePropertyIds
a seguir para derivar o estado de condução:
APIs disponíveis para aplicativos
O código reside nos seguintes locais:
Código | Localização |
---|---|
CarUxRestrictionsManager APIs públicas para registro de alterações de restrição 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 a serem registradas para mudanças de estado de condução. | /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Para simular os estados de condução, consulte Testes .
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2023-07-25 UTC.