电源管理

CPM提供的编码接口

CPM为系统应用程序和服务提供了相关编码接口,我们可以通过这些API对以下方面进行操作:

通过以下步骤进行API的调用:

  1. 通过Car API获取CPM实例
  2. 通过CPM实例调用CPM API

创建CPM对象

//通过上下文创建Car API
Car car = Car.createCar(this);
//通过Car API获取CPM对象
CarPowerManager powerManager =
  (CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);

CarPowerStateListener与其注册

系统允许应用和服务通过**CarPowerManager.CarPowerStateListener获取电源变化状态,该接口定义了方法onStateChanged()**,该方法是CPMS电源状态改变时的回调函数

//通过匿名类实现一个电源状态监听器
private final CarPowerManager.CarPowerStateListener powerListener =
  new CarPowerManager.CarPowerStateListener () {
		@Override
    public void onStateChanged(int state) {
				//TODO: 电源状态改变时执行的业务
				Log.i(TAG, "onStateChanged() state = " + state);
     }
};

如果要对上述状态监听器进行注册,需要创建一条新的线程并将该监听器与线程注册到CPM中:

executor = new ThreadPerTaskExecutor();
powerManager.setListener(powerListener, executor);

当注册完成后,监听器的**onStateChanged()方法将在电源状态改变时被调用,同时,存在一个整型state**来表示新的电源状态, CarPowerManager 中定义了实际值和电源状态之间的关联,如下表所示:

状态名 状态描述
STATE_ON 进入开启状态,系统已全面运行
STATE_SHUTDOWN_CANCELLED 关机动作被取消,同时电源状态回到正常状态
STATE_POST_SHUTDOWN_ENTER 关机准备工作已经完成,同时VMCU已经做好关机准备,进入关机状态
STATE_PRE_SHUTDOWN_PREPARE 已经提交了关机请求,但是CPMS还没有开始进行关机,此时屏幕和声音依旧开启。
STATE_SHUTDOWN_PREPARE 车库模式可以在此状态下运行
STATE_SUSPEND_ENTER 应用程序应该在此时被清理并准备好挂起到内存。
STATE_POST_SUSPEND_ENTER 挂起到内存的准备工作已经完成,VMCU已经准备好挂起到内存,进入挂起状态。
STATE_SUSPEND_EXIT 从挂起状态唤醒或取消挂起操作。
STATE_HIBERNATION_ENTER 应用程序应该在此时被清理并准备好休眠(挂起到硬盘)
STATE_POST_HIBERNATION_ENTER 休眠的住被已经完成,VMCU已经准备好进入休眠状态,然后进入休眠。
STATE_HIBERNATION_EXIT 从休眠状态唤醒或取消休眠操作。
STATE_WAIT_FOR_VHAL 系统正在启动,但是在进入ON状态之前需要等待VHAL回应通信。

CarPowerStateListener注销

通过CPM实例对监听器进行注销:

powerManager.clearListener();