本实验基于Android6.0
一 概述:
Android系统的定时开关机的实现分为定时开机和定时关机两部分,其中定时关机比较容易,因为不需要底层驱动的配合,只需要发特定广播就可以完成,而定时开机的实现稍微麻烦一些,因为需要底层RTC驱动的配合。
二 定时关机
定时关机实现核心代码:
XML文件: 提升apk系统权限,增加关机权限。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="xxxxxxxxxxxxx"android:versionName="1.0"android:sharedUserId="android.uid.system"> //与系统一样的uid,将apk提升为系统权限<uses-permission android:name="android.permission.SHUTDOWN"/> //该权限只有系统级apk才能使用
JAVA 核心代码
// 创建Intent,如果要重启,则使用 Intent.ACTION_REBOOTIntent shutdownIntent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);// 这里设置的是:是否需要用户确认,若不需要,可以不设置或设置为false shutdownIntent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);// 当作新任务执行 shutdownIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//启动Activitymcontext.startActivity(shutdownIntent);
三 定时开机
本人用的主板rtc驱动用的是HYM8563.c ,注册RTC驱动设备接口在:/sys/class/rtc/rtc0/device/alarm ,所以定时开机的逻辑便是上层向/sys/class/rtc/rtc0/device/alarm设备节点写入定时开机的时间给 rtc驱动即可。
四 验证
可以通过 adb shell 的发送广播指令来验证,或者麻烦一点自己写一个app界面,其实道理很简单,就是发送广播给定时开关机BroadcastReceiver,定时开关机BroadcastReceiver 接收到指定广播后,控制定时开机 或者 控制定时关机
代码有时间贴。