if (binder == null) {
Log.w(CarLibLog.TAG_CAR, “could not get binder for service:” + serviceName);
return null;
}
manager = createCarManager(serviceName, binder);
if (manager == null) {
Log.w(CarLibLog.TAG_CAR, “could not create manager for service:” + serviceName);
return null;
}
mServiceMap.put(serviceName, manager);
} catch (RemoteException e) {
handleRemoteException(e);
}
}
}
return manager;
}
private CarManagerBase createCarManager(String serviceName, IBinder binder) throws CarNotConnectedException {
CarManagerBase manager = null;
Log.d(“liueg”, "------------------createCarManager()serviceName "+serviceName);
switch (serviceName) {
case AUDIO_SERVICE: manager = new CarAudioManager(binder, mContext, mEventHandler);break;
case SENSOR_SERVICE: manager = new CarSensorManager(binder, mContext, mEventHandler);break;
case DYSENSOR_SERVICE: manager = new CarDYSensorManager(binder, mContext, mEventHandler);break;
case INFO_SERVICE: manager = new CarInfoManager(binder);break;
case APP_FOCUS_SERVICE: manager = new CarAppFocusManager(binder, mEventHandler);break;
case PACKAGE_SERVICE: manager = new CarPackageManager(binder, mContext);break;
case CAR_NAVIGATION_SERVICE: manager = new CarNavigationStatusManager(binder);break;
case CABIN_SERVICE: manager = new CarCabinManager(binder, mContext, mEventHandler);break;
case DIAGNOSTIC_SERVICE: manager = new CarDiagnosticManager(binder, mContext, mEventHandler);break;
case HVAC_SERVICE: manager = new CarHvacManager(binder, mContext, mEventHandler);break;
case DYHVAC_SERVICE: manager = new CarDYHvacManager(binder, mContext, mEventHandler);break;
case POWER_SERVICE: manager = new CarPowerManager(binder, mContext, mEventHandler);break;
case PROJECTION_SERVICE:manager = new CarProjectionManager(binder, mEventHandler);break;
case PROPERTY_SERVICE:
manager = new CarPropertyManager(binder, mEventHandler, false, “CarPropertyManager”);break;
case VENDOR_EXTENSION_SERVICE: manager = new CarVendorExtensionManager(binder, mEventHandler);break;
case CAR_INSTRUMENT_CLUSTER_SERVICE:
manager = new CarInstrumentClusterManager(binder, mEventHandler);break;
case TEST_SERVICE:
/* CarTestManager exist in static library. So instead of constructing it here,
- only pass binder wrapper so that CarTestManager can be constructed outside. */
manager = new CarTestManagerBinderWrapper(binder);break;
case VMS_SUBSCRIBER_SERVICE: manager = new VmsSubscriberManager(binder); break;
case BLUETOOTH_SERVICE: manager = new CarBluetoothManager(binder, mContext);break;
case TBOX_SERVICE: manager = TboxManager.getInstance(); break;
case STORAGE_MONITORING_SERVICE: manager = new CarStorageMonitoringManager(binder, mEventHandler); break;
case CAR_DRIVING_STATE_SERVICE:
manager = new CarDrivingStateManager(binder, mContext, mEventHandler);break;
case CAR_UX_RESTRICTION_SERVICE:
manager = new CarUxRestrictionsManager(binder, mContext, mEventHandler);break;
case CAR_CONFIGURATION_SERVICE: manager = new CarConfigurationManager(binder);break;
case CAR_MCU_SERVICE: manager = new CarMcuManager(binder, mContext, mEventHandler);break;
case DYCABIN_SERVICE: manager = new CarDYCabinManager(binder, mContext, mEventHandler);break;
default:break;
}
return manager;
}
- 具体的Manager -> 注册/反注册回调, set/get 属性CarProperty:
public final class CarHvacManager implements CarManagerBase {
private void handleOnChangeEvent(CarPropertyValue value) {
Collection callbacks;
synchronized (this) { callbacks = new ArraySet<>(mCallbacks); }
if (!callbacks.isEmpty()) {
<