Witam wszystkich, tworzę aplikację, której działanie jest bardzo proste. Ma ona za zadanie zmienić jasność wyświetlacza na wartość wpisaną w polu EditText - po wpisaniu interesującej nas wartości po wciśnięciu przycisku jasność zostaje zmieniona na podaną przez nas. Problem w tym, że za drugim razem po wpisaniu wartości i naciśnięciu przycisku, program nie może zapisać wartości do pliku, debugger wyrzuca błąd o następującej treści: "java.io.IOException: write failed: EBADF (Bad file number)". Proszę o pomoc, szukałem oczywiście jakichś informacji i do tej pory nie udało mi się naprawić tego problemu. Do pliku zapisuję używając instancji klasy java.lang.Process. Dzięki za poświęcenie kilku minut.
public class MainActivity extends AppCompatActivity { private Process rootProcess = null; private void getRootAccess() { try { rootProcess = Runtime.getRuntime().exec("su"); }catch(IOException e) { Toast toast = Toast.makeText(this, "Could not get root access! Exiting.", Toast.LENGTH_LONG); toast.show(); System.exit(1); } } private int getBrightnessValueFromEditText() { EditText brightnessInput = (EditText) findViewById(R.id.brightness_input_edtext); int brightnessValue = Integer.parseInt(brightnessInput.getText().toString()); return brightnessValue; } private void writeBrightnessValueToAppropriateFile(int brightnessValue) { String targetFilename = "/sys/class/leds/wled/brightness"; String commandToExecute ="echo " + Integer.toString(brightnessValue) + "> " + targetFilename; try { OutputStream outputToFile = rootProcess.getOutputStream(); outputToFile.write(commandToExecute.getBytes()); outputToFile.flush(); outputToFile.close(); }catch(IOException e) { Toast message = Toast.makeText(this, "Couldn't change the brightness!", Toast.LENGTH_LONG); message.show(); e.printStackTrace(); } } private void setBrightnessValue() { int brightnessValue = getBrightnessValueFromEditText(); if(brightnessValue < 1) { Toast message = Toast.makeText(this, "You entered a wrong value!", Toast.LENGTH_LONG); message.show(); //exit from function return; } writeBrightnessValueToAppropriateFile(brightnessValue); } private void setButtonsOnClickAction() { Button changeButton = (Button) findViewById(R.id.change_btn); changeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setBrightnessValue(); } }); //not programmed yet /*Button setToDefaultButton = (Button) findViewById(R.id.default_btn); setToDefaultButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });*/ } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getRootAccess(); setButtonsOnClickAction(); } @Override protected void onDestroy() { rootProcess.destroy(); } }