动开机,网上的介绍就比较少了,因为它需要底层 rtc 时钟的支持。前段时间根据客户需求
实现了自动开关机。在这里分享一下。
1. 简介
我的实现是在设置程序里面增加一个接口,让用户设置自动开关机,这个自动开关机的设置
可以参照闹钟的设置。关于自动关机,考虑到关机的时候,用户可能正有一些重要的操作,
那么应该给用户一个机会去取消当前的关机。
1)一个 BroadcastReceiver, 接收如下信息:
a) 自定义的 ACTION_REQUEST_POWER_OFF:设置 auto power off 时,通过
AlarmManager 设置的一个 RTC_WAKEUP 时钟。当到设置的关机时间时,之前设置到
AlarmManager 的这个 action 会被广播。我们实现的这个 BroadcastReceiver 接收到这个消
息后,就要开始 power off 流程
b) 自定义的 ACTION_REQUEST_POWER_ON:设置 auto power on 时,通过
AlarmManager 设置的一个 RTC_WAKEUP 时钟。我们知道 power on 的应该设置一个 rtc
的 alarm,那么这个 RTC_WAKEUP 的 alarm 是做什么的呢?其实当用户设置自动关机的
时候,我设置了 2 个时钟,一个是 RTC 时钟,用于关机状态下开机;还有一个就是这个
RTC_WAKEUP 时钟。之所以设置这个时钟,其实是这样的,比如说你设置了周一到周五
每天 7 点半自动开机,而周四早上你 7 点就打开了手机,这样到 7 点半的时候,之前设置
的时钟就过期了,如果不重新设置的话,周五早上是不会自动开机的。所以这个时候,之前
设置的 RTC_WAKEUP 就接收到了这样的信息,在重新设置下次自动开机的时钟。
c) BOOT_COMPLETE 和 TIMEZONE changed, Time set 等时间相关的 action:当系
统开机完成或时间、时区发生改变时,都需要重新设置 alarm。
2)一个处理 power off 的 Service,当 BroadcastReceiver 接收到
ACTION_REQUEST_POWER_OFF,我们给用户一个机会去取消当前的自动关机。这个
Service 的作用就是启动一个无背景的页面,给用户提示。同时播放之前用户设置的提示音
或振动。
3)一个 Activity:显示一个 dialog 提示用户要自动关机,并用一个计时器倒计时。当用户
确认关机,或者计时器到时间的时候,就关机。否则取消当前关机,并重设下次自动关机
alarm。
2. 自动关机的实现。自动关机的实现比较简单,这里主要说一下怎么设置 alarm,和实现关
机:
1) 设置自动关机的 alarm:
1. AlarmManager am = (AlarmManager) context
2. .getSystemService(Context.ALARM_SERVICE);
3.
4. Intent intent = new Intent(