Опитвам се да изпълня следния метод за подправяне на 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