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();
}
}
Po wielu dniach i godzinach mordowania się, udało mi się rozwiązać problem. Zamykam temat.