Usar entradas personalizadas do OEM para adicionar novos eventos de entrada de carro para novos e não padrão
recursos do Android. Eventos de entrada não padrão não são mapeados pelo
Android KeyEvent
, criado para ser genérico e funcionar em qualquer plataforma do Android
mas não estendidos para implementar recursos específicos do OEM. Por exemplo, um botão
localizado no volante, que abre um app de mapas quando é pressionado
(por um intent) com a localização atual do carro. Esse recurso permite
os motoristas visualizarem sua localização atual sem se distrairem ao
de carro.
Este artigo descreve como reutilizar um KeyEvent
Android já existente para
criar um CustomInputEvent
para uso apenas quando nenhum KeyEvent
do Android puder
ser usado para representar o atributo.
HW_CUSTOM_INPUT
Uma entrada personalizada OEM é representada por HW_CUSTOM_INPUT e
CustomInputEvent.java: HW_CUSTOM_INPUT é o
evento nativo, instanciado pelo hardware do carro (HAL do veículo). OEMs determinam
como instanciar esse evento. O acesso a HW_CUSTOM_INPUT é
definido como [somente leitura]{:.external}, com VehiclePropertyAccess:READ
.
Para garantir que a HAL do veículo sempre transmita o valor mais recente disponível, o
HW_CUSTOM_INPUT está definida como ON_CHANGE
, com
VehiclePropertyChangeMode:ON_CHANGE
.
Os valores HW_CUSTOM_INPUT são compostos de uma matriz de valores genéricos
int32
, definido como [global]{:.external} (com VehicleArea:GLOBAL
). Os três
números inteiros genéricos são:
O primeiro elemento representa o código de entrada a ser definido pelo OEM. Você pode associar qualquer semântica ao código de entrada.
O segundo elemento armazena a tela de destino, como a principal. ou cluster.
O terceiro elemento contém o número de vezes que o evento foi repetido. Por exemplo, para indicar quantas vezes um botão foi pressionado.
CustomInputEvent e API Car Input
InputHalService é o serviço do carro que recebe uma
HW_CUSTOM_INPUT
da HAL do veículo.
InputHalService converte o HW_CUSTOM_INPUT
de entrada em
o CustomInputEvent
, uma classe parcelable (link em inglês) do Java localizada na
car-lib/src/android/car/input, junto com as respectivas
aidl interface.
CarInputService, um serviço principal de entrada para carros, recebe CustomInputEvents e os envia para qualquer serviço registrado do sistema Android.
Para registrar e receber CustomInputEvents, os serviços do sistema precisam:
Implemente CarInputManager.CarInputCaptureCallback#onKeyEvents.
Registre-se por meio de CarInputManager#requestInputEventCapture. transmitindo
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
como a entrada. type.Para cancelar o registro, os serviços precisam invocar CarInputManager#releaseInputEventCapture.
O diagrama a seguir ilustra o fluxo de trabalho de um evento de entrada personalizada do OEM.
Serviços do sistema OEM para Android
Os OEMs oferecem serviço de sistema Android para lidar com o
CustomInputEvents de CarInputService
.
Somente os serviços marcados com o Permissão de privilégio android.permission.INJECT_EVENTS pode registrar e receber CustomInputEvents da API Car Input. (CarInputManager). Nenhum serviço ou aplicativo de terceiros pode ter a assinatura dessa permissão do sistema Android (somente serviços de OEM). Portanto, nenhum serviço ou aplicativo de terceiros pode com a API Car Input.
Os serviços do sistema Android do OEM podem acessar SystemApi
e métodos públicos.
Implementação de referência
Consulte a implementação de referência em packages/services/Car/tests/SampleCustomInputService, que é fornecido como exemplo e orientação. Por exemplo, para adicionar um novo botão no controle do volante. Quando pressionado, esse novo botão inicia a app de mapas com a localização atual do carro.
Neste exemplo, o OEM selecionou INPUT_CODE_F1
(o primeiro CustomInputEvent
).
função de conveniência) para representar esse novo recurso (abrir o aplicativo do Google Maps com
a localização atual do carro).
Durante a inicialização, este serviço se registra no CarInputManager
.
até requestInputEventCapture
(consulte a
código de registro de implementação de referência.
Ao receber CustomInputEvents de entrada, esse serviço envia a intent para iniciar o aplicativo de mapas. Para saber como fazer isso, consulte CustomInputEventListener.java.