Entrées personnalisées OEM

Utilisez des entrées personnalisées OEM pour ajouter de nouveaux événements d'entrée de la voiture pour les nouveaux événements et les événements non standards Android. Les événements d'entrée non standards ne sont pas mappés par Android KeyEvent, conçu pour être générique et fonctionner sur toutes les surfaces Android mais n'a pas été étendu pour implémenter des fonctionnalités spécifiques aux OEM. Par exemple, un bouton située sur la commande du volant qui, en appuyant dessus, ouvre une application Maps (via un intent) par la position actuelle de la voiture. Cette fonctionnalité permet aux conducteurs de visualiser leur position actuelle sans se laisser distraire pendant au volant.

Cet article explique comment réutiliser un KeyEvent Android existant pour Créez un CustomInputEvent à utiliser uniquement lorsqu'aucune KeyEvent Android ne peut pour représenter la caractéristique.

HW_CUSTOM_INPUT

Une entrée personnalisée OEM est représentée par HW_CUSTOM_INPUT. CustomInputEvent.java. HW_CUSTOM_INPUT correspond à la valeur Événement natif, instancié par le matériel de la voiture (HAL du véhicule). Ce sont les OEM qui déterminent comment instancier cet événement. L'accès à HW_CUSTOM_INPUT est défini en tant que [lecture seule]{:.external}, avec VehiclePropertyAccess:READ.

Pour que le HAL du véhicule puisse toujours diffuser la dernière valeur disponible, La notification HW_CUSTOM_INPUT est définie sur ON_CHANGE, avec VehiclePropertyChangeMode:ON_CHANGE

Les valeurs HW_CUSTOM_INPUT sont composées d'un tableau de valeurs génériques. int32, défini comme [global]{:.external} (avec VehicleArea:GLOBAL). Les trois Les entiers génériques sont:

  1. Le premier élément représente le code d'entrée que l'OEM doit définir. Vous pouvez associer n'importe quelle sémantique au code d'entrée.

  2. Le deuxième élément stocke l'écran cible, tel que l'écran principal. ou un cluster spécifique.

  3. Le troisième élément indique le nombre de fois où l'événement a été répété. Par exemple, pour indiquer le nombre de fois où les utilisateurs ont appuyé sur un bouton.

CustomInputEvent et API Car Input

InputHalService est le service pour voiture qui reçoit un appel HW_CUSTOM_INPUT dans le véhicule HAL.

InputHalService convertit le HW_CUSTOM_INPUT entrant en CustomInputEvent, une classe Java parcelable située dans car-lib/src/android/car/input, ainsi que les interface aidl.

CarInputService, un service principal de saisie automatique, reçoit des données CustomInputEvents, puis les envoie à n'importe quel service système Android enregistré.

Pour enregistrer et recevoir des événements CustomInputEvents, les services système doivent:

Le schéma suivant illustre le workflow d'un événement d'entrée personnalisée OEM.

Workflow d'entrée personnalisée OEM

Services système Android OEM

Les OEM fournissent leur service système Android pour gérer CustomInputEvents de CarInputService.

Seuls les services comportant le signe Autorisation android.permission.INJECT_EVENTS peut enregistrer et recevoir des événements CustomInputEvents de l'API Car Input (CarInputManager). Aucun service ni aucune application tiers être signé avec cette autorisation système Android (uniquement pour les services OEM). Par conséquent, aucun service ni aucune application tiers ne peut enregistrer à l'API Car Input.

Les services système Android OEM peuvent accéder à SystemApi et aux méthodes publiques.

Implémentation de référence

Consultez l'implémentation de référence dans packages/services/Car/tests/SampleCustomInputService, qui est fournie à titre d'exemple et à titre indicatif. Par exemple, pour ajouter un bouton sur la commande du volant. Lorsque vous appuyez sur ce nouveau bouton, l'application Maps avec la position actuelle de la voiture.

Dans cet exemple, l'OEM a sélectionné INPUT_CODE_F1 (CustomInputEvent) fonction de commodité) pour représenter cette nouvelle fonctionnalité (ouvrir l'application Maps avec l'emplacement actuel de la voiture).

Au démarrage, ce service s'enregistre auprès de CarInputManager. via requestInputEventCapture (consultez les code d'enregistrement pour l'implémentation de référence.

Lors de la réception d'événements CustomInputEvents, ce service envoie l'intent pour lancer l'application Maps. Pour savoir comment procéder, consultez CustomInputEventListener.java