有段时间做系统hook时需要用到系统重启,找了几种重启的方法,还有几种关机的方法,总结一下。

一,发送广播

Broadcast,

Intent.ACTION_REQUEST_SHUTDOWN关机广播

Intent.ACTION_REBOOT重启广播

ACTION_REQUEST和ACTION_REBOOT是Intent.java是声明的两个字符串常量,系统接收到这两个广播后就会响应关机或重启的操作。

源码中的实现如下:

声明代码路径:/frameworks/base/core/java/android/content/Intent.java

public static final String ACTION_REQUEST_SHUTDOWN = "android.intent.action.ACTION_REQUEST_SHUTDOWN"

public static final String ACTION_REBOOT = "android.intent.action.REBOOT"

实现代码示例:

广播关机

广播重启

权限:

AndroidMenifest.xml中添加代码

android:sharedUserId="android.uid.system"提升至系统权限

添加关机权限

需要在源码中编译项目,所以需要在项目根目录下添加Android.mk文件:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := PowerActionDemo

LOCAL_CERTIFICATE := platform

include $(BUILD_PACKAGE)

二,通过init.rc启动系统服务来运行sh文件

Android文件系统启动后首先调用/init,init文件会解析init.rc和init.xxx.rc然后执行,init.rc会在系统初始化过程中做一些简单的初始化操作,可以利用init过程解析自己加进去的关机或重启脚本。

编写关机或重启脚本sh文件

#!/system/bin/sh

reboot

#!/system/bin/sh

reboot -p #或者shutdown

编写mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PREBUILT_EXECUTABLES := system_shutdown.sh system_reboot.sh

LOCAL_MODULE_TAGS := optional

include $(BUILD_MULTI_PREBUILT)

修改init.rc文件,在文件最后添加如下:

service system_shutdown /system/bin/system_shutdown.sh #第一步中的sh文件名

oneshot #只启动一次

disabled #禁用服务,不会开机自启动,但是可以在应用程序中手动启动

service system_reboot /system/bin/system_reboot.sh

oneshot

disabled

新建目录,将上面的mk文件和两个sh脚本放到目录下,然后将文件夹副指导系统路径中,然后编译源码。

即可在代码中调用系统服务重启或关机

SystemProperties.set("ctl.start", "system_shutdown"); //system_shutdown是sh脚本的文件名

SystemProperties.set("ctl.start", "system_reboot");

三,通过init.rc启动系统服务来运行sh文件(也是最常用的方法)

//Runtime执行linux-shell

case R.id.shutdown_btn3:

try{

Log.v(TAG, "root Runtime->shutdown");

//Process proc =Runtime.getRuntime().exec(new String[]{"su","-c","shutdown"}); //关机

Process proc =Runtime.getRuntime().exec(new String[]{"su","-c","reboot -p"}); //关机

proc.waitFor();

}catch(Exception e){

e.printStackTrace();

}

break;

case R.id.reboot_btn3:

try {

Log.v(TAG, "root Runtime->reboot");

Process proc =Runtime.getRuntime().exec(new String[]{"su","-c","reboot "}); //关机

proc.waitFor();

}catch (Exception ex){

ex.printStackTrace();

}

break;

前提是android系统system/bin 目录下存在reboot和shutdown文件,大多数型号的设备都是有的。

设备需要获取root权限。

四,PowerManager提供了reboot接口

PowerManager pManager=(PowerManager) getSystemService(Context.POWER_SERVICE);

pManager.reboot(null);//重启

android系统关机广播,android关机方法汇总相关推荐

  1. android 消息推送方法,一种基于Android系统的消息推送方法技术方案

    [技术实现步骤摘要] 本专利技术涉及一种基于Android系统的消息推送方法,属于计算机 技术介绍 推送功能在手机应用开发中越来越重要,已经成为手机开发的必选项.消息推送,就是在互联网上通过定期传送用 ...

  2. android 监控行为,一种针对Android系统App行为的监控方法

    主权项: 1.一种针对Android系统App行为的监控方法,通过安全内核实现方法在Android内核层添加模块,实现对整个Android系统的系统调用的拦截与监控:包括如下步骤:S1.编写内核模块: ...

  3. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

  4. android系统自动休眠代码流程,一种基于Android系统下的可控休眠方法及系统与流程...

    本发明涉及一种手机应用,尤其涉及一种基于android系统下的可控休眠方法及系统. 背景技术: android设备的休眠指的是当长时间不用手机时手机会自动进入一个省电模式,调低或者关闭一部分电压的输出 ...

  5. android字符串块,一种Android系统字符串提取及合并方法与流程

    本发明涉及字符串提取及合并方法,尤其涉及一种Android系统字符串提取及合并方法. 背景技术: 随着智能通讯终端的日益普及,采用Android系统的智能通讯终端设备越来越走向世界各地,而对于多国语言 ...

  6. spatialite android,一种基于Android系统的Spatialite空间数据库加密方法与流程

    本发明属于数据库技术领域,具体涉及一种基于Android系统的Spatialite空间数据库加密方法. 背景技术: 随着经济建设及智能终端和移动GIS技术的不断发展,终端的CPU.GPU.内存.显示屏 ...

  7. android系统recovery模式,Android系统Recovery模式中文详细说明

    Recovery具体功能: 1.刷系统:新下载好的rom,,直接放sd卡上刷(进nand),,无需windows! 2.像电脑的ghost,,允许用户随意将系统和里面的个人资料备份成一个文件,,并允许 ...

  8. [转] Android系统版本号和Android API level对应表

    平时总会去查 Android系统版本号和Android API level对应关系,有时候上不了Google,网上搜的又不全.这里翻译记录下,顺便给出原文网址:https://developer.an ...

  9. android系统关机广播,Android开机广播和关机广播

    android开机广播:代码如下: import android.content.BroadcastReceiver; import android.content.Context; import a ...

最新文章

  1. com.android.ide.common process ProcessException:Failed to execcue aapt
  2. 软件测试技术lab2——Selenium上机实验
  3. Python入门100题 | 第055题
  4. 编程基础python学习2完结
  5. ---WebCam网络摄像头9 usb dirver
  6. 【Java多线程】并发时的线程安全:快乐影院示例
  7. 网络与并行计算机,并行计算机系统结构网络版 白中英,杨旭东编著.pdf
  8. 有向图的传递闭包实现三种实现(Warshall+DFS+BFS)
  9. AcWing 801. 二进制中1的个数
  10. java基础知识总结(4)
  11. 吴恩达的机器学习,属实牛逼
  12. Oracle、MySQL等数据库对比
  13. 【转】计算机网络之域名、主机名、IP地址和URL
  14. win10安装steam有损计算机,win10系统steam安装更新失败的解决方法
  15. 独家 | 全球2000家客户,这家公司推动林肯MKZ成为最流行的自动驾驶样车
  16. 什么是阻塞式和非阻塞io流?
  17. 日本使用ips细胞制作“类器官”的最新进展
  18. 台式电脑设置意外断电后自启动
  19. 镜头跑焦测试软件,简易的测试镜头跑焦和矫正AF微调办法
  20. Delphi_调用DLL方法[创建对象下面的方法]

热门文章

  1. 进程间通信的方式及原理
  2. DHCPV6 开源代码如何获取device的MAC
  3. Web网页设计之HTML_2. HTML元素 简单文本排版
  4. pcs增加mysql资源_pcs命令配置示例
  5. 创业思维的误区 (余世维)
  6. 服务器密码修改db2数据库密码错误,db2数据库近一年运行正常,9月4日晚突然连不上数据库,报密码错误,重启数据库后正常?...
  7. 加速度传感器灵敏度的几种表示方式
  8. uni-app H5打包上线流程
  9. SpringBoot2后端项目-验证码图片生成
  10. EasyExcel增加下拉选择框