zoukankan      html  css  js  c++  java
  • [置顶] Android下实现自动关机的方法总结

    最近在网上看了一些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);

    这种方法笔者试过适用于大部分机型

  • 相关阅读:
    SpringBoot项目启动与关闭脚本
    springboot mybatis启动初始化数据库
    springboot mybatis多数据库支持
    Tomcat配置https访问
    Oracle批量生成版本
    Oracle创建用户表空间
    OracleServiceXE服务没有了
    IDEA离线升级
    js过滤并校验XSS
    docker命令
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3146752.html
Copyright © 2011-2022 走看看