2017-09-01 2 views
0

Ich versuche, diese "Reihe von Befehlen" auf Android Oreo zu verwenden, aber ich habe ein Problem. Zum Testen verwende ich diesen Befehl auf meinem Nexus 5-fach:adb Shell-Einstellungen setzen sichere sysui_nav_bar Befehle auf Android Oreo 8.0 funktioniert nicht ohne root

adb shell settings put secure sysui_nav_bar "space,recent;home;back,space" 

Also habe ich beschlossen, diesen Befehl in meiner App zu implementieren und ohne Root-Hilfe versuchen. In der App-Manifest hinzugefügt ich die Erlaubnis sichere Einstellungen zu schreiben:

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> 

Da ist in meinem MainActivity habe ich eine Taste, um den Befehl auszuführen, die Sie vorher gelesen.

 testButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      try { 
      Process process = Runtime.getRuntime().exec("settings put secure sysui_nav_bar \"space,recent;home;back,space\""); 
      } catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();} 
     } 
    }); 

Sobald meine app gebaut wurde ich lief es auf meinem 5-fach und über adb getippt ich diesen Befehl schreiben sichere Einstellungen zu ermöglichen: adb shell pm grant com.customizer.smart.batterysavercustomizer android.permission.WRITE_SECURE_SETTINGS und dieser Befehl ohne Fehler excuted. Aber wenn ich versuche, auf meinen "testButton" zu tippen, ist nichts passiert und 0 error im androidmonitor.

Letzter Versuch, den ich tat, war mit Root-Hilfe. I edited meine Vorschau Befehlsschaltfläche:

testButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     try { 
     Process process = Runtime.getRuntime().exec("su -c settings put secure sysui_nav_bar \"space,recent;home;back,space\""); 
     } catch (Exception e) {Toast.makeText(getApplicationContext(), "" + e, Toast.LENGTH_LONG).show();} 
    } 
}); 

Wenn ich auf meinem testButton die zu garant root Erlaubnis gebeten App angezapft, und es funktioniert. Aber wie ist es möglich, dass auf dem gleichen Telefon die App "Benutzerdefinierte Navigationsleiste" App, die den gleichen adb Befehl verwendet, ohne root funktioniert?. ich folgte. guide on XDA

Antwort

1

Sie Settings-Klasse statt Runtime.getRuntime verwenden soll() exec()

testButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SECURE_SETTINGS) == PackageManager.PERMISSION_GRANTED) { 
      Settings.Secure.putString(context.getContentResolver(), "sysui_nav_bar", valueToSave); 
     } else { 
      //Write secure Settings permission not granted 
      //Show instructions about how to grant it via ADB 
     } 
    } 
}); 
+1

Thank you so viel es funktioniert sehr gut – Smart

Verwandte Themen