2 Stimmen

wie kann ich die Ausgabe eines Unterprozesses in Java erhalten

Vielleicht hat es etwas mit Android zu tun, aber IMO nicht viel.

    package com.main.app;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.widget.TextView;

public class RootPermissionActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream outputStream = new DataOutputStream(p.getOutputStream());
            outputStream.writeBytes("touchasd /m\n");

                       //codes below used to get the error output, but get nothing.
            TextView suCommandMessage = (TextView)findViewById(R.id.suCommandMessage);
            BufferedReader d = new BufferedReader(new InputStreamReader(p.getErrorStream()));
              String msg;
              while((msg = d.readLine()) != null) {
                  suCommandMessage.setText(msg);
              }

            outputStream.writeBytes("exit \n");
            p.waitFor();
        } catch(IOException e) {
            new AlertDialog.Builder(this)
                           .setTitle("Exception")
                           .setMessage("IOException: " + e)
                           .setPositiveButton("OK", null)
                           .show();
        } catch(InterruptedException e) {
            new AlertDialog.Builder(this)
               .setTitle("Exception")
               .setMessage("InterruptedException: " + e)
               .setPositiveButton("OK", null)
               .show();
        }
    }
}

Zuerst erstelle ich einen neuen Prozess su um die Root-Berechtigung zu erhalten, ist es nur ein Unterprozess, um Shell-Befehle auszuführen, dann schreibe ich einige Codes in den Unterprozess, alles ist OK. dann möchte ich die Fehlerausgabe des Unterprozesses erhalten, also schreibe ich einen falschen Befehl touchasd /m\n aber ich weiß nicht, wie ich die Fehlerausgabe des Unterprozesses erhalte, kann mir jemand helfen? thx. :)

0voto

Josnidhin Punkte 12006

Führen Sie etwas wie das Folgende aus, um den Fehlerstrom des Prozesses zu erhalten.

BufferedReader stdErr = new BufferedReader(new InputStreamReader(p.getErrorStream()));

Ich habe nicht gesehen, die Kommentare in Ihrem Code-Block scheint es, dass die obige Zeile und verwandte Sachen sind auskommentiert i

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X