一. 内存溢出方式实现重启(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();
}