Я пытаюсь выполнить следующий метод, чтобы подделать MAC-адрес устройства Android. Метод запускается каждый раз, когда пользователь нажимает кнопку:
public void changeMac(View v) throws IOException {
editText = (EditText)findViewById(R.id.newMacText);
String mac = editText.getText().toString();
Log.d("my log", "" + mac);
String[] cmds = {"ip link set wlan0 address " + mac};
Log.d("my log", "in method");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
for (String tmpCmd : cmds) {
os.writeBytes(tmpCmd + "\n");
}
os.writeBytes("exit\n");
os.flush();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(p.getInputStream()));
StringBuilder result = new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
result.append(line);
}
Log.d("my log", "new mac " + Utils.getMACAddress("wlan0"));
Log.d("my log", result.toString());
}
Теперь, когда пользователь снова нажимает кнопку, приложение вылетает, и я получаю сообщение об ошибке «сломанная труба».
android.system.ErrnoException: write failed: EPIPE (Broken pipe)
а также незаконное государственное исключение. Что я могу сделать, чтобы эта ошибка перестала возникать и чтобы метод вызывался несколько раз?
p
)? Я предполагаю, что это процесс root/su? - person Robert   schedule 22.06.2015