自動車向けアプリ 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 |
| 通行料金カードの状態、通行料金カードの種類 | 3 | |||
| バッテリー残量、燃料残量、燃料残量低下、走行可能距離 | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 生速度、表示速度(車のクラスタ ディスプレイに表示される速度) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 走行距離計の距離 | 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 エミュレータ ガイドのハードウェアの状態をエミュレートするを参照してください。