7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android Automotive(carパッケージ)のServiceたち

Last updated at Posted at 2019-08-26

#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が返ってくる。)

example
// 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も終了する。)
####裏で実行されていること

android.car.Car.java
// 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型を返す為、キャストが必要)

example
// 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
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?