我正在尝试从我的代码中执行命令, 命令是“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 []中,以防空格导致问题,但它没有太大的区别。
有没有人知道这方面的任何解决方法?
答案 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上搜索一下,看看其他开发者是如何做到这一点的,不乏手电筒应用程序。