Запуск команды ping в оболочке из приложения - PullRequest
0 голосов
/ 18 марта 2011

Я нашел исходный код, который дает возможность запустить команду оболочки из приложения и, насколько я понимаю, возвращает строку с результатом выполненной команды:

http://code.google.com/p/netmeterled/source/browse/trunk/src/com/britoso/cpustatusled/utilclasses/ShellCommand.java?r=29

Я попытался выполнить «ping -c 3 www.google.com», но данный метод возвращает «Ошибка: ноль».Способ выполнения команды:

ShellCommand cmd = new ShellCommand();
CommandResult r = cmd.sh.runWaitFor("ping -c 5 www.google.com");
String text;
if (!r.success()) {
    text = "Error:\n" + r.stderr;
}
else {
    text ="Ping test results:\n" + r.stdout;
}
log(text);

В чем проблема?

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Вы, наверное, уже решили это. Но сказать вам, что вы не должны делать это, казалось, не ответили мне. Очевидно, что если команда ping не существует, вы не сможете ее вызвать и справиться с ошибкой. Но если это произойдет, вау!

Вот способ сделать это. Все равно работает на эмуляторе 2.1. Эмулятор любит запускаться после хорошего интернет-соединения. Если вы запустите эмулятор и измените соединение, оно может не работать после этого. Мне не нужно было никаких разрешений, чтобы сделать это на эмуляторе.

public class Rooted extends Activity {
    EditText body;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        body = (EditText)findViewById(R.id.bodyEditText);
        try {
        Process process = Runtime.getRuntime().exec("/system/bin/ping -c 1 betterpaving.com");
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        int i;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((i = reader.read(buffer)) > 0) output.append(buffer, 0, i);
        reader.close();
        body.append(output.toString()+"\n");
        } 
        catch (IOException e) {
            body.append("Error\n");
            e.printStackTrace();
            } 
        }//oncreate

    //TODO: Fill In Methods Etc.

    //"ping -c 1 betterpaving.com" try this sometime
}//class

В любом случае он отличается от вашего и должен быть помещен куда-то, кроме блока создания, но ...

1 голос
/ 18 марта 2011

У вас есть разрешение на Интернет для вашего приложения?И подключено ли устройство к интернету?Есть ли какие-либо выходные данные в Logcat?

В этом вопросе показан один метод, который можно использовать для проверки связи с Java без необходимости запуска команды оболочки.

...