自動車用ハードウェア 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
Car App 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)

Java

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)

Java

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 エミュレータ ガイドのハードウェアの状態をエミュレートするを参照してください。