android:如何从代码中运行shell命令

时间:2010-06-16 15:54:00

标签: android shell command

我正在尝试从我的代码中执行命令,  命令是“echo 125> /sys/devices/platform/flashlight.0/leds/flashlight/brightness”  我可以在没有adb shell问题的情况下运行它

我正在使用Runtime类来执行它:

Runtime.getRuntime().exec("echo 125 > /sys/devices/platform/flashlight.0/leds/flashlight/brightness");

但是我收到权限错误,因为我不应该访问sys目录。  我还尝试将命令放在String []中,以防空格导致问题,但它没有太大的区别。

有没有人知道这方面的任何解决方法?

6 个答案:

答案 0 :(得分:12)

手机需要扎根,之后您可以执行以下操作:

public static void doCmds(List<String> cmds) throws Exception {
    Process process = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(process.getOutputStream());

    for (String tmpCmd : cmds) {
            os.writeBytes(tmpCmd+"\n");
    }

    os.writeBytes("exit\n");
    os.flush();
    os.close();

    process.waitFor();
}    

答案 1 :(得分:2)

同意你可能需要root手机才能写入系统文件。我很惊讶亮度不是通过SDK公开的。

有关从代码运行shell命令的详细信息,check out此项目:

答案 2 :(得分:1)

如果你只是想设置亮度,为什么不通过provided API这样做(AKA,你有没有理由按照自己的方式去做)。

int brightness = 125; 
Settings.System.putInt(
      ftaContext.getContentResolver(), 
      Settings.System.SCREEN_BRIGHTNESS, 
      brightness); 

答案 3 :(得分:1)

adb shell可以作为没有root设备的超级用户。 它是一个调试桥。你可以通过它做任何你想做的事。

但是,当您调用Runtime.getRuntime()。exec时,您没有相同的提交。某些shell命令甚至不能从exec中获得。

因此,您不仅需要有根设备,还需要预先设定。

答案 4 :(得分:1)

你也可以使用写入权限来修改/系统..

答案 5 :(得分:0)

我认为该设备需要“扎根”才能实现此功能。在google上搜索一下,看看其他开发者是如何做到这一点的,不乏手电筒应用程序。