1. 程式人生 > >Android系統定時開關機實現簡述

Android系統定時開關機實現簡述

本實驗基於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_REBOOT
    Intent shutdownIntent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
	
	// 這裡設定的是:是否需要使用者確認,若不需要,可以不設定或設定為false 
    shutdownIntent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
	
	// 當作新任務執行 
    shutdownIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	
	//啟動Activity
    mcontext.startActivity(shutdownIntent);

三 定時開機

本人用的主機板rtc驅動用的是HYM8563.c ,註冊RTC驅動裝置介面在:/sys/class/rtc/rtc0/device/alarm ,所以定時開機的邏輯便是上層向/sys/class/rtc/rtc0/device/alarm裝置節點寫入定時開機的時間給 rtc驅動即可。

四 驗證

可以通過 adb shell 的傳送廣播指令來驗證,或者麻煩一點自己寫一個app介面,其實道理很簡單,就是傳送廣播給定時開關機BroadcastReceiver,定時開關機BroadcastReceiver 接收到指定廣播後,控制定時開機 或者 控制定時關機

程式碼有時間貼。