最近在网上看了一些Android下实现自动关机的方法,有的不行,有的只适用一些机型,有的适用于大部分机型,笔者在此总结一下
法一:
Intent newIntent = new Intent(Intent.ACTION_SHUTDOWN);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(newIntent);这种方法笔者试过,运行时出错
法二:
try {
//获得ServiceManager类
Class<?> ServiceManager = Class .forName("android.os.ServiceManager");//获得ServiceManager的getService方法
Method getService = ServiceManager.getMethod("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 = cStub.getMethod("asInterface", android.os.IBinder.class); //调用asInterface方法获取IPowerManager对象 Object oIPowerManager = asInterface.invoke(null, oRemoteService); //获得shutdown()方法 Method shutdown = oIPowerManager.getClass().getMethod("shutdown",boolean.class,boolean.class); //调用shutdown()方法 shutdown.invoke(oIPowerManager,false,true);} catch (Exception e) {
Log.e("shutdown", e.toString(), e); }利用反射调用oIPowerManager方法,此种方法在有些机型上是可以的,但有些机型上在Method shutdown = oIPowerManager.getClass().getMethod("shutdown",boolean.class,boolean.class);时会报出java.lang.NoSuchMethodException: shutdown [boolean, boolean] 错误,可能是这些机型不存在此方法
法三:
Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
// 源码中"android.intent.action.ACTION_REQUEST_SHUTDOWN“ 就是 Intent.ACTION_REQUEST_SHUTDOWN方法
intent.putExtra("android.intent.extra.KEY_CONFIRM", false);// 源码中"android.intent.extra.KEY_CONFIRM"就是 Intent.EXTRA_KEY_CONFIRM方法
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);这种方法笔者试过适用于大部分机型