#Android Automotive
※Android Autoとは別物です。
公式:
https://developer.android.com/reference/android/car/classes
###AutoとAutomotive
Android Autoは、一般的なAndroidアプリをAuto対応車載機で表示・操作出来るようにするものです。
いつも使っているアプリを車載機でも使えるようにしよう!といったものです。
Android Automotiveは、車載システムにHAL(Hardware Abstraction Layer)を持ち、
自動車関連のデータを収集し、Androidアプリケーションで使用することが出来るようになるものです。
#環境構築
別記事予定。
#車の作り方
Carクラスのstaticメソッド createCar(Context, ServiceConnection)で作ります。
This API works only for devices with PackageManager.FEATURE_AUTOMOTIVE .
PackageManager.FEATURE_AUTOMOTIVE を備えてるデバイスでしか呼び出せない。
(備えていない場合、"FEATURE_AUTOMOTIVE not declared while android.car is used"
エラーでnullが返ってくる。)
// MainActivity
...
private Car car;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
car = Car.createCar(this, new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
// ServiceとActivityの接続が確立された時の処理
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
// Serviceと切断された時の処理
}
});
}
#Serviceの開始
car.connect();
で、サービスとバインドされる。
car.disconnect();
で、バインドが外れる。(Serviceも終了する。)
####裏で実行されていること
// connect()でstartCarService()が呼ばれる。
private void startCarService(){
Intent intent = new Intent();
// 明示的Intent
intent.setPackage("com.android.car");
// Actionを設定
intent.setAction("android.car.ICar");
// bindService()と同様の動作。
// UserHandleはマルチユーザー環境でのユーザー判別用。
boolean bound = mContext.bindServiceAsUser(intent, mServiceConnectionListener, Context.BIND_AUTO_CREATE, UserHandle.CURRENT_OR_SELF);
// boundがtrueになるか、リトライ回数が20回に到達するまで、
// 500ms間隔でメインスレッド宛にbindServiceをリトライするRunnableをpostする。
// (コード省略)
// 接続されると...
private final ServiceConnection mServiceConnectionListener = new ServiceConnection() {
public void onServiceConnected(ConponentName name, IBinder service) {
synchronized (Car.this) {
// com.android.car.ICarImpl.java
mService = ICar.Stub.asIntergace(service);
}
// createCarする時にoverrideしたonServiceConnectedが呼ばれる。
mServiceConnectionListenerClient.onServiceConnected(name, service);
}
public void disconnect() {
// Car関連Managerの.onCarDisconnected()が呼ばれる。
tearDownCarManagers();
// アンバインド
mContext.unbindService(mServiceConnectionListener);
}
#CarパッケージのService取得
Car.getCarManager(String serviceName)で、
Context.getSystemService(String serviceName)と同じように、
車固有のサービスを持ってくる。(Object型を返す為、キャストが必要)
// CarAudioManagerを取得したい場合
CarAudioManager carAudioManager = car.getCarManager(Car.AUDIO_SERVICE);
#CarパッケージのService一覧
class | Service名 | 概要 |
---|---|---|
CarAudioManager | AUDIO_SERVICE | 音声処理 |
CarSensorManager | SENSOR_SERVICE | 車のセンサデータ監視(Speedなど) |
CarInfoManager | INFO_SERVICE | 車に関する静的情報を取得(バッテリー容量、燃料容量、メーカーなど) |
CarAppFocusManager | APP_FOCUS_SERVICE | |
CarPackageManager | PACKAGE_SERVICE | |
CarUxRestrictionsManager | CAR_UX_RESTRICTION_SERVICE | |
CarConfigurationManager | CAR_CONFIGURATION_SERVICE | |
CarNavigationStatusManager | NAVIGATION_STATUS_SERVICE |
##hide指定
以下、@hide指定のService
class | Service名 | 概要 |
---|---|---|
CarCabinManager | CABIN_SERVICE | |
CarDiagnosticManager | DIAGNOSTIC_SERVICE | |
CarHvacManager | HVAC_SERVICE | |
CarPowerManager | POWER_SERVICE | |
CarProjectionManager | PROJECTION_SERVICE | |
CarPropertyManager | PROPERTY_SERVICE | |
CarVendowExtensionManager | VENDOR_EXTENSION_SERVICE | |
CarInstrumentClusterManager | CAR_INSTRUMENT_CLUSTER_SERVICE | |
CarTestManager | TEST_SERVICE | |
VmsSubscriberManager | VMS_SUBSCRIBER_SERVICE | |
CarBluetoothManager | BLUETOOTH_SERVICE | |
CarStorageMonitoringManager | STORAGE_MONITORING_SERVICE | |
CarDrivingStateManager | CAR_DRIVING_STATE_SERVICE |