자동차 하드웨어 API

자동차 앱 API 수준 3부터 자동차 앱 라이브러리 API를 사용하여 차량 속성 및 센서에 액세스할 수 있습니다.

요구사항

Android Auto에서 API를 사용하려면 먼저 Android Auto 모듈의 build.gradle 파일에 androidx.car.app:app-projected 종속 항목을 추가합니다. Android Automotive OS의 경우 Android Automotive OS 모듈의 build.gradle 파일에 androidx.car.app:app-automotive 종속 항목을 추가합니다.

또한 AndroidManifest.xml 파일에서 사용하려는 자동차 데이터를 요청하는 데 필요한 관련 권한을 선언해야 합니다. 이러한 권한은 사용자가 개발자에게 부여해야 합니다. 플랫폼에 종속된 흐름을 만들지 않아도 Android Auto와 Android Automotive OS에서 동일한 코드를 사용할 수 있습니다. 하지만 필요한 권한은 다릅니다.

CarInfo

이 표에서는 CarInfo API에 제공된 속성과 이를 사용하기 위해 요청해야 하는 권한을 설명합니다.

메서드 속성 권한:
Android Auto
권한:
AAOS
자동차 앱 API
fetchModel 제조업체, 모델, 연도 android.car.permission.CAR_INFO 3
fetchEnergyProfile EV 커넥터 유형, 연료 유형 com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_INFO 3
fetchExteriorDimensions

API 30 이상을 실행하는 일부 AAOS 차량에서만 데이터를 사용할 수 있습니다.

외부 크기 해당 사항 없음 android.car.permission.CAR_INFO 7

addTollListener

removeTollListener

통행료 카드 상태, 통행료 카드 유형 3

addEnergyLevelListener

removeEnergyLevelListener

배터리 잔량, 연료 잔량, 연료 잔량 부족, 남은 주행 거리 com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_ENERGY

android.car.permission.CAR_ENERGY_PORTS

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addSpeedListener

removeSpeedListener

원시 속도, 디스플레이 속도 (자동차의 클러스터 디스플레이에 표시됨) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

주행 거리계 거리 com.google.android.gms.permission.CAR_MILEAGE Google Play에서 설치한 Android Automotive OS 앱에서 데이터를 사용할 수 없습니다. 3

예를 들어 남은 범위를 가져오려면 CarInfo 객체를 인스턴스화한 다음 OnCarDataAvailableListener를 만들어 등록합니다.

Kotlin

val carInfo = carContext.getCarService(CarHardwareManager::class.java).carInfo

val listener = OnCarDataAvailableListener<EnergyLevel> { data ->
    if (data.rangeRemainingMeters.status == CarValue.STATUS_SUCCESS) {
      val rangeRemaining = data.rangeRemainingMeters.value
    } else {
      // Handle error
    }
  }

carInfo.addEnergyLevelListener(carContext.mainExecutor, listener)

// Unregister the listener when you no longer need updates
carInfo.removeEnergyLevelListener(listener)

자바

CarInfo carInfo = getCarContext().getCarService(CarHardwareManager.class).getCarInfo();

OnCarDataAvailableListener<EnergyLevel> listener = (data) -> {
  if(data.getRangeRemainingMeters().getStatus() == CarValue.STATUS_SUCCESS) {
    float rangeRemaining = data.getRangeRemainingMeters().getValue();
  } else {
    // Handle error
  }
};

carInfo.addEnergyLevelListener(getCarContext().getMainExecutor(), listener);

// Unregister the listener when you no longer need updates
carInfo.removeEnergyLevelListener(listener);

자동차의 데이터를 항상 사용할 수 있다고 가정하지 마세요. 오류가 발생하면 요청한 값의 상태를 확인하여 요청한 데이터를 가져올 수 없는 이유를 파악하세요. CarInfo 클래스 정의에 관한 자세한 내용은 참조 문서를 확인하세요.

CarSensors

CarSensors 클래스를 사용하면 차량의 가속도계, 자이로스코프, 나침반, 위치 데이터에 액세스할 수 있습니다. 이러한 값의 사용 가능 여부는 OEM에 따라 달라질 수 있습니다. 가속도계, 자이로스코프, 나침반의 데이터 형식은 SensorManager API에서 가져오는 것과 동일합니다.

예를 들어 차량의 방향을 확인하려면 다음을 실행합니다.

Kotlin

val carSensors = carContext.getCarService(CarHardwareManager::class.java).carSensors

val listener = OnCarDataAvailableListener<Compass> { data ->
    if (data.orientations.status == CarValue.STATUS_SUCCESS) {
      val orientation = data.orientations.value
    } else {
      // Data not available, handle error
    }
  }

carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, carContext.mainExecutor, listener)

// Unregister the listener when you no longer need updates
carSensors.removeCompassListener(listener)

자바

CarSensors carSensors = getCarContext().getCarService(CarHardwareManager.class).getCarSensors();

OnCarDataAvailableListener<Compass> listener = (data) -> {
  if (data.getOrientations().getStatus() == CarValue.STATUS_SUCCESS) {
    List<Float> orientations = data.getOrientations().getValue();
  } else {
    // Data not available, handle error
  }
};

carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, getCarContext().getMainExecutor(),
    listener);

// Unregister the listener when you no longer need updates
carSensors.removeCompassListener(listener);

자동차의 위치 데이터에 액세스하려면 android.permission.ACCESS_FINE_LOCATION 권한을 선언하고 요청해야 합니다.

테스트

Android Auto에서 테스트할 때 센서 데이터를 시뮬레이션하려면 데스크톱 헤드 단위 가이드의 센서센서 구성 섹션을 참고하세요. Android Automotive OS에서 테스트할 때 센서 데이터를 시뮬레이션하려면 Android Automotive OS 에뮬레이터 가이드의 하드웨어 상태 에뮬레이션을 참고하세요.