runtime启动android服务,Runtime.exec():在Android重新启动?

我正在寻找一个解决scheme,可以用来重新启动一个有根的设备。 我知道重新启动设备对于用户来说是非常糟糕的devise, 正如这里所说的那样 ,而不是真正的应用程序。 主要目的是在testing期间重新启动手机(我工作在一个video聊天应用程序,有时我需要重新启动时,一切都南下)

我观察到,重新启动电话比使用ACTION_REBOOT重新启动时通常在terminal(例如, adb shell或ConnectBot)中重新启动要快得多 ,我无法继续使用。

目前,我能够获得超级用户权限

Process root = Runtime.getRuntime().exec("su");

但我不能做实际的重新启动。 我尝试G1(HTC)和Galaxy S(三星),没有任何成功。 我在/system/bin/rebootfind了可执行文件

以下是我的一些尝试:

Process reboot = Runtime.getRuntime().exec("/system/bin/reboot"); Process reboot = Runtime.getRuntime().exec("reboot"); Process reboot = Runtime.getRuntime().exec("su reboot");

我阅读这篇关于Runtime.exec()的缺陷的文章 ,但我想我不是这种情况。

由于使用ConnectBot使我可以做这样的行动,我敢肯定这是可能的。 请不要告诉我去看看ConnectBot代码 ,这是一个大而复杂的项目:)

你能帮我解决这个问题吗?

谢谢。

重启在Android中正常工作。 你可能没有正确地执行runtime.exec()。 你需要处理

public static void rebootSU() { Runtime runtime = Runtime.getRuntime(); Process proc = null; OutputStreamWriter osw = null; StringBuilder sbstdOut = new StringBuilder(); StringBuilder sbstdErr = new StringBuilder(); String command="/system/bin/reboot"; try { // Run Script proc = runtime.exec("su"); osw = new OutputStreamWriter(proc.getOutputStream()); osw.write(command); osw.flush(); osw.close(); } catch (IOException ex) { ex.printStackTrace(); } finally { if (osw != null) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } } try { if (proc != null) proc.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } sbstdOut.append(ReadBufferedReader(new InputStreamReader(proc .getInputStream()))); sbstdErr.append(ReadBufferedReader(new InputStreamReader(proc .getErrorStream()))); if (proc.exitValue() != 0) { } }

最后经过几周的search:

Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});

我发现我不能以编程方式重新启动。

另外,我可以使用terminal模拟器应用程序在我的android手机上打开一个terminal窗口,键入su获得root访问的#提示,然后键入“#reboot”,我得到“不允许!

有什么build议么?

好吧,我不明白,我知道了。 在HTC手机上,即使使用SU root访问权限,重新启动命令也不起作用。 需要调用BUSYBOX来执行重启命令。

此代码适用于三星Galaxy S2,S4,索尼Xperia S(LTi 26)

public static void rebootDevice() { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("reboot \n"); } catch (Throwable t) {t.printStackTrace;} }

经过漫长的斗争,我find了工作的解

如果您的系统使用串口,​​那么执行下面的命令,

Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});

如果使用正常的端口然后在命令下面取消

Runtime.getRuntime().exec(new String[]{"/system/xbin/su","-c","reboot now"});

区别只在/bin和/xbin

所以可以像第一个命令抛出exception然后执行第二个代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值