Android汽车服务篇(五) CarDrivingStateService

一. 简介

        在UX Restrictions中需要根据当前的车辆行驶状态,决定当前的限制规则. 其中行驶状态地获取就是通过CarDrivingStateService来实现的. 它的主要职责就是对外提供车辆的行驶状态信息.

        应用可以使用CarDrivingStateManager获取和监听驾车状态, CarDrivingStateManager中的方法不多, 用法上非常简单.  需要注意的是相关接口是系统接口(SystemAPI), 系统应用才能使用.

        在CarDrivingStateEvent类中主要定义了四种驾车状态.

DRIVING_STATE_UNKNOWN 当前状态未知
 DRIVING_STATE_PARKED 驻车状态
DRIVING_STATE_IDLING 静止状态, 未驻车但车速为0
DRIVING_STATE_MOVING 行驶状态, 车速大于0

二. CarDrivingStateService使用

使用方式如下:

        Car car = Car.createCar(this);
        CarDrivingStateManager carDrivingStateManager = 
                (CarDrivingStateManager)car.getCarManager(Car.CAR_DRIVING_STATE_SERVICE);

获取当前驾车状态

   CarDrivingStateEvent stateEvent = carDrivingStateManager.getCurrentCarDrivingState();
        if (stateEvent == null) {
            return;
        }
        String text = null;
        switch (stateEvent.eventValue) {
            case CarDrivingStateEvent.DRIVING_STATE_MOVING:
                text="行驶中";
                break;
            case CarDrivingStateEvent.DRIVING_STATE_IDLING:
                text="速度为0";
                break;
            case CarDrivingStateEvent.DRIVING_STATE_PARKED:
                text="驻车";
                break;
            case CarDrivingStateEvent.DRIVING_STATE_UNKNOWN:
                text="Unknown";
                break;

        }
        Log.e("test", "驾车状态: "+ text);

三. 监听驾车状态

监听驾车状态的变化:

carDrivingStateManager.registerListener(new CarDrivingStateManager.CarDrivingStateEventListener() {
            @Override
            public void onDrivingStateChanged(CarDrivingStateEvent carDrivingStateEvent) {
                //
            }
        });

驾车状态的判定依赖当前的车速信息和档位信息.  CarDrivingStateService通过向CarPropertyService注册监听器, 监听了VehicleProperty.PERF_VEHICLE_SPEED(车速属性)

VehicleProperty.GEAR_SELECTION(档位属性)   VehicleProperty.PARKING_BRAKE_ON(驻车制动属性)这3个属性的变化, 从而实现了对当前行驶状态的判断.

        结合这三个属性, 确定当前的行驶状态 是 UNKNOWN, PARKED  IDLING  MOVING 大致的判断规则如下:

1. 当前档位为P档时, 当前状态为parked

2. 当前档位不为P档, 如果辅助制动器(手刹)为工作状态,  则当前状态为parked

3. 当前档位不为P档且辅助制动器未工作, 则根据车速判断, 车速为0, 则当前状态为idling;  车速不为0, 则当前状态为moving

总体来说, CarDrivingStateService并不复杂, 使用同样的方式,系统应用通过CarPropertyManager也可以实现对车辆状态的判断, 但如果对行驶状态的判断都由应用去完成, 那么难免出现不一致的情况.   CarDrivingStateService结合了各个属性, 提供了更加统一的车辆行驶状态值, 并提供给上层应用来调用.

猜你喜欢

转载自blog.csdn.net/u012514113/article/details/129867734