首页 > 解决方案 > Runtime.exec() 和在 android 的终端中运行 shell 命令有什么区别

问题描述

我的摩托罗拉 G6 已植根,我有一个应用程序应该写入根文件以在主机模式和设备模式之间切换。该文件如下:

/sys/class/power_supply/usb/usb_otg

在 android 终端模拟器中,我键入以下命令:

$    su
#    echo 3 > /sys/class/power_supply/usb/usb_otg

这些命令将使手机进入主机模式。我知道这是因为手机已连接到光谱仪,并且在我执行此命令时它已通电。

自从测试这些命令以来,我将以下代码放入我的应用程序中:

toastMessage("Attempting to power up spectrometer");
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("echo 3 > /sys/class/power_supply/usb/usb_otg");
toastMessage("Reached this point");

此代码似乎没有任何错误,它运行到最后但它不为光谱仪供电。

我的问题是为什么这些命令可以在 Android Terminal Emulator 中运行,但不能通过 Runtime.exec() 运行?

标签: javaandroidshellterminalsh

解决方案


您需要使用此代码

    toastMessage("Attempting to power up spectrometer");
    Runtime.getRuntime().exec("su -c \"\"echo 3 > /sys/class/power_supply/usb/usb_otg");
    toastMessage("Reached this point");

您需要在一个代码中执行 su 和其他代码。第二次要执行运行时代码时,它将在没有 su 权限的情况下执行。


推荐阅读