Пытался вызвать ping с некоторыми пользовательскими данными (флаг -p
). Поскольку мне нужно было передать параметры, казалось интуитивно понятным использовать перегрузку exec()
, которая принимает массив строк. Он продолжал давать сбой, поэтому я попробовал тот же самый ввод, что и одна длинная строка, и теперь все в порядке. Я понятия не имею, в чем проблема, я проверял ввод несколько раз.
Попробовал возиться с дополнительными пробелами внутри массива строк, чтобы исключить любые проблемы с пропусками между параметрами.
String sPattern = StringUtils.bytesToHex(sData.getBytes());
sPattern = padHexString(sPattern);
sPattern = "-p " + sPattern.toLowerCase(); // "-p 3132372e302e302e31ffffffffffffff"
// this FAILS
Runtime.getRuntime().exec(new String[]{"/system/bin/ping",
"-c 1",
"-s 64",
sPattern,
sReportServer});
// this WORKS
Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 " +
sPattern + " " + sReportServer);
Первый вызов завершается неудачно и либо показывает мне использование, либо выдает ошибку, что «шаблон должен быть шестнадцатеричным числом». что это такое. Второй звонок работает нормально.
Оба метода должны работать нормально.