Android系统关机或重启的几种实现方式 .

来源:互联网 发布:东非大裂谷 知乎 编辑:程序博客网 时间:2024/06/14 04:42

一. 内存溢出方式实现重启(4.0之后不可用)

在安卓4.0之前,系统有个bug,通过疯狂的向系统添加吐司是可以实现死机并且重启的。具体实现代码如下

<strong>    for (int i = 0; i < Integer.MAX_VALUE; i++) {Toast.makeText(getApplicationContext(), "", 1).show();}</strong>

这种方法最简单,但是却不实用,而且在4.0之后谷歌修补了这个漏洞。这里仅作为一种参考

 

二. 发送系统广播方式

关机或重启的广播:Intent.ACTION_REQUEST_SHUTDOWN和Intent.ACTION_REBOOT

我们只需要向系统发送这两个广播就行。但是,两个广播只能由系统应用才能使用,也就是pid是system的应用才能发送的广播。

这里,我们需要在manifast.xml这里面进行一些修改

android:sharedUserId="android.uid.system" 


然后增加权限

<uses-permission android:name="android.permission.SHUTDOWN" /> 

 

把项目放在源码中进行编译,增加mk文件

01.LOCAL_PATH:= $(call my-dir)  02.include $(CLEAR_VARS)  03.  04.LOCAL_MODULE_TAGS := optional  05.  06.LOCAL_SRC_FILES := $(call all-java-files-under, src)  07.  08.LOCAL_PACKAGE_NAME := PowerActionDemo  09.LOCAL_CERTIFICATE := platform  10.  11.include $(BUILD_PACKAGE) 



 

三. 调用Linux-shell(最常用,也是最实用,需要root)

Runtime可以用来调用并执行shell命令的,而Android支持shell语言的,基于这一点,可以利用Runtime来执行 关机或重启的shell命令

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


 

0 0