usniyo 2012-10-20 15:47 采纳率: 0%
浏览 14180
已采纳

android 中如何实现关机、重启?

android 中如何实现关机、重启?
手机已经ROOT,程序也得到了root权限,但通过Runtime.getRuntime().exec("reboot");并未重启成功,手机中也确实找到了reboot文件,在终端模拟器上用reboot命令也是可以重启的。
那么,应该怎么做才能实现重启呢?还有关机。

补充:

我用Runtime.getRuntime().exec("su -c \"reboot\"");并没有成功重启,但用Runtime.getRuntime().exec("su -c \"/system/bin/reboot\"");成功重启了。这是为什么?还有一个问题就是这样的重启方法好像和系统自身的重启不一样,系统自身的重启时会有一个关机动画,但这个重启时是屏幕变暗后直接重启,我怕这样的重启是不安全的。

关于关机,我看了一下,手机(已ROOT)中并没有找到shutdown,那么关机要怎么做呢?自己做一个shutdown文件?
  • 写回答

5条回答 默认 最新

  • usniyo 2012-10-22 10:15
    关注

    Rebooter.java

    import java.io.DataOutputStream;
    import java.io.IOException;
    
    final class Rebooter extends Thread
    {
        public static final String CMD_REBOOT = "reboot";
        public static final String CMD_SHUTDOWN = "reboot -p";
    
        private final String strEnter = "\n";
        private final String cmd_su = "su";
        private final String cmd_exit = "exit";
    
        private String cmd = "";
    
        public Rebooter()
        {
        }
    
        public void reboot(String command)
        {
            if (!command.equals(CMD_REBOOT) && !command.equals(CMD_SHUTDOWN))
                return;
    
            cmd = command;
            start();
        }
    
        @Override
        public void run()
        {
            try
            {
                sleep(1000);
    
                Process localProcess = Runtime.getRuntime().exec(cmd_su);
                DataOutputStream localDataOutputStream = new DataOutputStream(
                        localProcess.getOutputStream());
                localDataOutputStream.writeBytes(cmd + strEnter);
                localDataOutputStream.writeBytes(cmd_exit + strEnter);
                localDataOutputStream.flush();
                localDataOutputStream.close();
                localProcess.waitFor();
                localProcess.destroy();
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    
    }
    

    1、手机必需先获得Root权限,并授予应用程序Root权限。
    2、手机中有reboot命令,如果没有就得自己另做处理。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题