代码之家  ›  专栏  ›  技术社区  ›  Arya

命令在终端中工作,但使用process.exec时出现“无右引号”错误

  •  1
  • Arya  · 技术社区  · 6 年前

    在Java程序中,我有以下方法

    public static void enableAirplaneMode() {
        String s = null;
        try {
            Runtime rt = Runtime.getRuntime();
            Process pr = null;
            String command = "adb shell \"su -c 'settings put global airplane_mode_on 1'\"";
            System.out.println(command);
            pr = rt.exec(command);
    
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(pr.getInputStream()));
    
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }
    
            pr.destroy();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    上述方法的输出是

    adb shell "su -c 'settings put global airplane_mode_on 1'"
    /system/bin/sh: no closing quote
    

    但是,如果我直接在终端中复制/粘贴命令,一切都会按预期工作。为什么这里出现“无右引号”错误?

    1 回复  |  直到 6 年前
        1
  •  3
  •   LMC    6 年前

    尝试 passing an array 正如javadocs上的建议。

    String[] command = {"adb", "shell", "su -c 'settings put global airplane_mode_on 1'"};