OEM 맞춤 입력

OEM 맞춤 입력을 사용하여 새로운 비표준 Android 기능에 관한 새로운 자동차 입력 이벤트를 추가하세요. 비표준 입력 이벤트는 기존 Android KeyEvent로 매핑되지 않으며, 일반적이고 모든 Android 표시 경로에서 작동하도록 설계되었지만 OEM 관련 기능을 구현하도록 확장되지는 않습니다. 예를 들어, 핸들 컨트롤에 있는 버튼을 누르면 인텐트를 통해 자동차의 현재 위치가 적용된 지도 앱이 열립니다. 이 기능을 통해 운전자는 운전하는 동안 방해받지 않고 현재 위치를 시각적으로 확인할 수 있습니다.

이 도움말에서는 기존 Android KeyEvent를 재사용하여, 기능을 나타내는 데 사용할 수 있는 Android KeyEvent가 없을 때 사용할 CustomInputEvent를 만드는 방법을 설명합니다.

HW_CUSTOM_INPUT

OEM 맞춤 입력은 HW_CUSTOM_INPUTCustomInputEvent.java로 표현됩니다. HW_CUSTOM_INPUT은 자동차 하드웨어(차량 HAL)에 의해 인스턴스화되는 네이티브 이벤트입니다. OEM은 이 이벤트를 인스턴스화하는 방법을 결정합니다. HW_CUSTOM_INPUT에 대한 액세스는 [읽기 전용]{:.external}(VehiclePropertyAccess:READ)로 설정됩니다.

차량 HAL이 사용 가능한 최신 값을 항상 브로드캐스트할 수 있도록 HW_CUSTOM_INPUT 알림은 ON_CHANGE(VehiclePropertyChangeMode:ON_CHANGE)로 설정됩니다.

HW_CUSTOM_INPUT 값은 일반 int32의 배열로 구성되며 [전역]{:.external}(VehicleArea:GLOBAL)로 설정됩니다. 세 가지 일반 정수는 다음과 같습니다.

  1. 첫 번째 요소는 OEM에서 정의할 입력 코드를 나타냅니다. 모든 시맨틱을 입력 코드에 연결할 수 있습니다.

  2. 두 번째 요소는 기본 디스플레이나 계기판 같은 타겟 디스플레이를 저장합니다.

  3. 세 번째 요소는 이벤트가 반복된 횟수를 포함합니다. 예를 들어 버튼을 누른 횟수를 나타냅니다.

CustomInputEvent 및 Car Input API

InputHalService는 차량 HAL에서 들어오는 HW_CUSTOM_INPUT을 수신하는 자동차 서비스입니다.

InputHalService는 들어오는 HW_CUSTOM_INPUT을 각 AIDL 인터페이스와 함께 CustomInputEvent(car-lib/src/android/car/input에 있는 Java parcelable 클래스)로 변환합니다.

핵심 자동차 입력 서비스인 CarInputService는 들어오는 CustomInputEvents를 수신하고, 등록된 Android 시스템 서비스로 전송합니다.

들어오는 CustomInputEvents를 등록하고 수신하려면 시스템 서비스에서 다음을 실행해야 합니다.

다음 다이어그램은 OEM 맞춤 입력 이벤트의 워크플로를 보여줍니다.

OEM 맞춤 입력 워크플로

OEM Android 시스템 서비스

OEM은 CarInputService에서 들어오는 CustomInputEvents를 처리하기 위한 Android 시스템 서비스를 제공합니다.

android.permission.INJECT_EVENTS 권한으로 표시된 서비스만 Car Input API(CarInputManager)에서 CustomInputEvents를 등록하고 수신할 수 있습니다. 이 Android 시스템 권한으로 서드 파티 서비스나 애플리케이션에 서명할 수 없습니다(OEM 서비스만 해당). 따라서 서드 파티 서비스나 애플리케이션은 Car Input API에 등록할 수 없습니다.

OEM Android 시스템 서비스는 SystemApi 및 공개 메서드에 액세스할 수 있습니다.

참조 구현

예 및 가이드라인으로 제공되는 참조 구현은 packages/services/Car/tests/SampleCustomInputService에서 확인하세요. 핸들 컨트롤에 새 버튼을 추가하는 예를 들 수 있습니다. 이 새 버튼을 누르면 현재 자동차 위치가 적용된 지도 앱이 시작됩니다.

이 예에서 OEM은 이 새로운 기능(현재 자동차 위치가 적용된 지도 앱이 열림)을 나타내는 INPUT_CODE_F1(첫 번째 CustomInputEvent 편의 함수)을 선택했습니다.

시작 시 이 서비스는 requestInputEventCapture를 통해 CarInputManger에 자체적으로 등록합니다(참조 구현 등록 코드 참고).

들어오는 CustomInputEvents를 수신하면 이 서비스는 인텐트를 전송하여 지도 앱을 시작합니다. 이 작업을 실행하는 방법은 CustomInputEventListener.java를 참고하세요.