Starting March 27, 2025, we recommend using android-latest-release
instead of aosp-main
to build and contribute to AOSP. For more information, see Changes to AOSP.
Key input
Stay organized with collections
Save and categorize content based on your preferences.
Based on the Vehicle HAL property VEHICLE_PROPERTY_HW_KEY_INPUT
, defined in
hardware/libhardware/include/hardware/vehicle.h
, Android Automotive handles key input
from elements that include steering remote switches, hardware buttons, and touch panels.
For example, dispatch of a key event over a CAN bus network:

Figure 1. Android Automotive key events over CANbus flow.
Key event data
The following data is attached to each key event in the Vehicle HAL:
- Input action (up/down):
VEHICLE_HW_KEY_INPUT_ACTION_DOWN = 0,
VEHICLE_HW_KEY_INPUT_ACTION_UP = 1,
- Key code mapped to Android keys in a partner implementation of the Vehicle HAL.
- Target display (main/instrument cluster):
VEHICLE_DISPLAY_MAIN = 0,
VEHICLE_DISPLAY_INSTRUMENT_CLUSTER = 1,
The key input handling in the instrument cluster uses CarInputService
(the same
service uses for the regular input handling in the vehicle). Key events get propagated to the
InstrumentClusterRenderingService
:
public class MyClusterRenderingService extends
InstrumentClusterRenderingService {
...
@Override protected void onKeyEvent(KeyEvent keyEvent) { /* Inject to
Presentation? */ }
}
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-08-29 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-29 UTC."],[],[],null,["# Key input\n\nBased on the Vehicle HAL property `VEHICLE_PROPERTY_HW_KEY_INPUT`, defined in\n`hardware/libhardware/include/hardware/vehicle.h`, Android Automotive handles key input\nfrom elements that include steering remote switches, hardware buttons, and touch panels.\n\nFor example, dispatch of a key event over a CAN bus network:\n\n**Figure 1.**Android Automotive key events over CANbus flow.\n\nKey event data\n--------------\n\nThe following data is attached to each key event in the Vehicle HAL:\n\n- Input action (up/down): \n\n ```scdoc\n VEHICLE_HW_KEY_INPUT_ACTION_DOWN = 0,\n VEHICLE_HW_KEY_INPUT_ACTION_UP = 1,\n ```\n- Key code mapped to Android keys in a partner implementation of the Vehicle HAL.\n- Target display (main/instrument cluster): \n\n ```scdoc\n VEHICLE_DISPLAY_MAIN = 0,\n VEHICLE_DISPLAY_INSTRUMENT_CLUSTER = 1,\n ```\n\nThe key input handling in the instrument cluster uses `CarInputService` (the same\nservice uses for the regular input handling in the vehicle). Key events get propagated to the\n`InstrumentClusterRenderingService`: \n\n```transact-sql\npublic class MyClusterRenderingService extends\nInstrumentClusterRenderingService {\n ...\n @Override protected void onKeyEvent(KeyEvent keyEvent) { /* Inject to\n Presentation? */ }\n}\n```"]]