无法在android上运行runtime.exec

时间:2012-06-22 21:15:30

标签: java android runtime.exec

我似乎无法在我的Android应用程序中运行runtime.exec。我已经尝试了一系列shell实用程序,这是我正在使用的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    filesPrinter = (Button) findViewById(R.id.print_files);
    filesPrinter.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            try {
                Process proc = Runtime.getRuntime().exec("ls");
                out = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
                in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                String line;
                while((line = in.readLine()) != null) {
                    System.out.println(line);
                }
                System.out.println("Done reading");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
 }

我没有收到错误,但也没有在logcat中获得任何内容。

3 个答案:

答案 0 :(得分:2)

问题最终成为eclipse logcat的一个错误。使用adb logcat,我可以看到应该输出的所有内容。出于某种原因,eclipse上的logcat显示它已连接但未从模拟器接收任何应用程序级别的输出。

答案 1 :(得分:0)

也许您当前的工作目录(ls扫描没有任何参数)根本不包含任何文件。尝试提供路径作为命令参数。

答案 2 :(得分:0)

认为你错过了proc.waitFor()....

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    filesPrinter = (Button) findViewById(R.id.print_files);
    filesPrinter.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            try {
                Process proc = Runtime.getRuntime().exec("ls");
                out = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
                in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                String line;
                while((line = in.readLine()) != null) {
                    System.out.println(line);
                }
                System.out.println("Done reading");
                //
                proc.waitFor(); // THIS!!!
                //
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
 }