• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Android - problem z zapisem do pliku systemowego używając konta root.

Object Storage Arubacloud
0 głosów
90 wizyt
pytanie zadane 5 stycznia 2017 w Android, Swift, Symbian przez Damian11131 Stary wyjadacz (13,490 p.)
zamknięte 31 stycznia 2017 przez Damian11131

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.

komentarz zamknięcia: Problem solved.

Podobne pytania

0 głosów
2 odpowiedzi 133 wizyt
pytanie zadane 17 stycznia 2018 w C i C++ przez Tomek112 Początkujący (310 p.)
0 głosów
2 odpowiedzi 453 wizyt
0 głosów
1 odpowiedź 1,207 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...