关于android使⽤代码实现关机使⽤以下⽅式进⾏关机操作,必须是在设备已经进⾏root后,否则⽆效,重要!重要!重要!
1、使⽤⼴播的⽅式进⾏关机操作
不root的话,权限异常 requires android.permission.SHUTDOWN 代码
String action ="com.android.internal.intent.action.REQUEST_SHUTDOWN";
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.N){
action ="android.intent.action.ACTION_REQUEST_SHUTDOWN";
}
Intent shutdown =new Intent(action);
shutdown.putExtra("a.KEY_CONFIRM",false);
shutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
startActivity(shutdown);
finish();
}catch(Exception e){
e.printStackTrace();
}
2、通过反射的⽅式进⾏关机操作
通过PowerManager源码你可以看到 有个IPowerManager的类实现了shutdown()的⽅法,下⾯就是通过反射获取IPowerManager调⽤关机的⽅法
不root的话,权限异常 SecurityException: Neither user 10121 nor current process has
android.permission.REBOOT.
代码
try {
Class ServiceManager = Class.forName("android.os.ServiceManager");
//获得ServiceManager的getService⽅法
Method getService = Method("getService", java.lang.String.class);
//调⽤getService获取RemoteService
Object oRemoteService = getService.invoke(null,Context.POWER_SERVICE);
//获得IPowerManager.Stub类
Class cStub = Class.forName("android.os.IPowerManager$Stub");
//获得asInterface⽅法
Method asInterface = Method("asInterface", android.os.IBinder.class);
//调⽤asInterface⽅法获取IPowerManager对象
Object oIPowerManager = asInterface.invoke(null, oRemoteService);
/
/获得shutdown()⽅法
安卓intent用法Method shutdown = Class().getMethod("shutdown",boolean.class,java.lang.String.class,boolean.class); //调⽤shutdown()⽅法
shutdown.invoke(oIPowerManager,false,null,true);
}catch (Exception e){
Log.i("sun","关机异常=="+e);
Throwable t = e.getCause();// 获取⽬标异常
t.printStackTrace();
}
还有⼀种⽅法就是操作系统⽂件,更是需要root,没有再写,你有兴趣的话,可以⾃⼰搞⼀下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论