android系统定制功能:定时重启

  • Post author:
  • Post category:其他




不积跬步无以至千里



首先接到这个功能(定时重启)的时候有点茫然,为什么要做这个功能啊?不是已经有一个定时开关机了吗?把定时关机和定时开机设置有个小间隔不就是定时开关机了吗?哈哈,当然有的可能没有定时开机或者关机,再说客户要求了也不能不做,那么接下来就说说我做定时重启的思路和步骤!先上一下效果图吧如下图:

这里写图片描述

1、界面

一个功能嘛,肯定是要实现它的界面了,因为之前有了开关机的功能了,所以再加一个定时重启,应该很简单的吧,但是我刚开始做这个界面的时候并不顺利,因为他并不和我们平常一样找到数据源(一个数组或者一个List)添加进去这个“定时重启”这个字符串就可以了,因为通过我查看代码看出这个数据源是来源于查询数据库获取的数据源!如图所示:

这里写图片描述

这里写图片描述

添加数据——向数据库里插入一条数据代码如图所示:

这里写图片描述

这里写图片描述

这里界面整体用的listview,适配器用的是CursorAdapter,这里针对存储定制闹钟重启手机的实体类如下图TimerSwitch:

这里写图片描述

bindview加载视图

这里写图片描述

这里写图片描述

这里通过获取到数据库传上来的数据,然后通过实体类中id来判断是power-on、power-off还是reboot,如果是reboot就给其图标、名字

2、逻辑处理

这一块针对一些字符串的添加就不说了,然后说一下设置闹钟到重启的逻辑过程。

这里是把定时重启的开关的监听如图:

这里写图片描述

这里写图片描述

如图所示,可以看出它会先delete那些失效的TimerSwitch,然后去更新这次你开启定时重启的闹钟时间

接下来看一下TimerSwitchUtils.updateTimerSwitch这个方法如下图:

这里是把最新的闹钟更新数据库

这里写图片描述

接下来就是其中方法TimerSwitchUtils.enableTimerSwitch方法:

这里写图片描述

这里是根据不同的id去操作power-on、power-off、reboot,接着追踪registerNextTimerSwitchOn方法

这里写图片描述

这里可以看出是定时一个闹钟去开启广播,其中的广播的action如下:

这里写图片描述

接下来我们根据这个action去追踪这个广播为:

这里写图片描述

接下来看一下TimerSwitchReceiver代码如下图:

这里写图片描述

这里写图片描述

看代码可知,接到发过来的延迟广播,判断是不是重复闹钟

不是则:重新刷新闹钟信息数据库

是则:设置定时闹钟


监听是不是手机是否处于打电话的状态


是则:先接听电话,等待电话接听状态结束

否则:执行fireShutDown方法,如下图:

这里写图片描述

据图可知,会先发送广播把系统的对话框清除(猜测以免有冲突),再发送一个延迟启动ShutDownActivity,接下来看一下ShutDownActivity中的处理如下图:

这里写图片描述

据图所知,我们这个Activity以对话框的形式出现

接下来看一下onCreate方法:

这里写图片描述

可知,加了一个唤醒锁,然后开启了一个计时器,并监听电话状态,看一下计时器。看一下系统重写的对话框的方法如下图:

每次重新显示对话框调用:

这里写图片描述

初始化对话框:

这里写图片描述

这里写图片描述

会出现如图对话框:

这里写图片描述

再看一下实现重启的方法startReboot:

这里写图片描述

通过Intent.ACTION_REBOOT的action来启动这个重启的Activity,Intent.EXTRA_KEY_CONFIRM是是否弹出确认重启对话框(当然不用),Intent.FLAG_ACTIVITY_NEW_TASK开启一个新的Task栈


有帮助的话点个赞



版权声明:本文为WDYShowTime原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。