企业网站 php 下载,wordpress 360插件,东莞网站推广推广软件,上饶网站建设1、AAOS概述
Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统#xff0c;它是基于现有Android系统的基础上增加了新特性#xff0c;最主要的就是增加了CarService#xff08;汽车服务#xff09;模块。我们很容易把Android AutoMotive和Android Auto搞混…1、AAOS概述
Android AutoMotive OS是谷歌针对车机使用场景打造的操作系统它是基于现有Android系统的基础上增加了新特性最主要的就是增加了CarService汽车服务模块。我们很容易把Android AutoMotive和Android Auto搞混前者是基于源代码的扩展是系统级的编译后运行在车上的系统而后者是谷歌推出的一款将手机内容投射到兼容的车机屏幕上的产品主要的运算任务是在手机端就类似于苹果的Carplay一样。 说回AAOS其中的CarService是以独立APK的方式存在使用system UID权限运行。总体关系如下
2、CarService服务和API
Carservice内部包括了很多子服务较为核心和常用的服务有
服务名称业务内容CarPropertyService汽车属性服务CarAudioService汽车音频服务CarPowerManagerService汽车电源管理服务CarPackageMangerService汽车包管理服务CarDrivingStateService汽车行驶状态服务CarUxRestrictionsManagerService汽车限制规则服务针对行车中视频的限制等CarInputService汽车输入服务针对车上的硬按键
当然对于应用来说是通过Car API的方式去调用以上的服务这是典型的Android Binder通信机制的使用。API中以各种Manager的方式对外提供主要包括
API名称业务内容CarPropertyManager汽车属性管理APICarInfoManager汽车信息管理APICarSensorManager传感器管理APICarHvacManager空调控制APICarCabinManager座舱控制APICarVendorExtentionManger外设管理APICarAudioManager车辆音频管理APICarPowerManager车辆电源管理APICarPackageManager车辆包管理API
其中的CarInfoManager、CarSensorManager、CarHvacManager、CarCabinManager、CarVendorExtentionManger以及CarPropertyManager在服务端都是对应的CarPropertyService。但是在Android11中CarInfoManager、CarSensorManager、CarHvacManager、CarCabinManager、等细分的Manager已经被标记为了过时的状态谷歌还是建议大家直接使用CarPropertyManager去操作各个车辆的属性这样能够更好地适应变化。
3、Car API的使用方式
应用使用Car API链接CarService对应的服务端有两种方式一种是传统的异步方式一种是简化的同步方式。
3.1 异步方式
首先通过Car.createCar创建Car对象
Car mCar Car.createCar(mContext, mServiceConnection);并且还要主动调用Car的connect方法发起连接流程
mCar.connect();在连接上CarService之后mServiceConnection会做回调
private final ServiceConnection mServiceConnection new ServiceConnection( ) {Overridepublic void onServiceConnected(CompenentName name, IBinder service) {try {mCarInfoManager (CarInfoManager) mCar.getCarManager(Car.INFO_SERVICE);} catch(CarNotConnectedException e) {LOG.e(“”,e);}}
}OverridePublic void onServiceDeisconnected(ComponentName name) {}
}
这里是用CarInfoManager做例子其他的Manager也同样是这样的方式获取。
3.2 同步的方式
这种方式应用不必在连接并接收到回调之后才能使用Car API可以直接同步获取如下
mCar Car.createCar(this);
mCarInfoManager (CarInfoManager) mCar.getCarManager(Car.INFO_SERVICE);4、 CarService启动流程
CarService的启动流程流程和其他系统服务的类似都是在开机的时候由SystemServer启动不同的是CarService是运行在单独的进程并且中间会有一个CarServiceHelperService做一个桥接把位于单独仓库中的Carservice黏合进来流程图如下 CarService在最新的Android14版本中所有的工作已经交给CarServiceImpl完成。 在CarServiceImpl的onCreate方法中会获取到HAL层的Vehicle的客户端对象然后实例化ICarImpl而在ICarImpl里面又会去初始化具体的各个服务比如
//packages/services/Car/service/src/com/android/car/ICarImpl.java
private ICarImpl(Builder builder) {
mCarPowerManagementService constructWithTrace(t, CarPowerManagementService.class,() - new CarPowerManagementService.Builder().setContext(mContext).setPowerHalService(mHal.getPowerHal()).setSystemInterface(mSystemInterface).setCarUserService(mCarUserService).setPowerPolicyDaemon(builder.mPowerPolicyDaemon).setFeatureFlags(mFeatureFlags).build(),allServices);mCarPropertyService constructWithTrace(t, CarPropertyService.class,() - new CarPropertyService.Builder().setContext(mContext).setPropertyHalService(mHal.getPropertyHal()).build(), allServices);
}
当客户端通过Car去获取对应Manager时就会返回对应的服务
// packages/services/Car/car-lib/src/android/car/Car.java
public Object getCarManager(String serviceName) {IBinder binder mService.getCarService(serviceName);
}
服务端对应
//packages/services/Car/service/src/com/android/car/ICarImpl.java
public IBinder getCarService(String serviceName) {switch (serviceName) {case Car.AUDIO_SERVICE:return mCarAudioService;case Car.APP_FOCUS_SERVICE:return mAppFocusService;case Car.PACKAGE_SERVICE:return mCarPackageManagerService;case Car.POWER_SERVICE:return mCarPowerManagementService;case Car.CABIN_SERVICE:case Car.HVAC_SERVICE:case Car.INFO_SERVICE:case Car.PROPERTY_SERVICE:case Car.SENSOR_SERVICE:case Car.VENDOR_EXTENSION_SERVICE:return mCarPropertyService;
}
}