CPM为系统应用程序和服务提供了相关编码接口,我们可以通过这些API对以下方面进行操作:
通过以下步骤进行API的调用:
//通过上下文创建Car API
Car car = Car.createCar(this);
//通过Car API获取CPM对象
CarPowerManager powerManager =
(CarPowerManager) car.getCarManager(android.car.Car.POWER_SERVICE);
系统允许应用和服务通过**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回应通信。 |
通过CPM实例对监听器进行注销:
powerManager.clearListener();