2016-11-07 9 views
-1

Ich habe ein seltsames Problem. Letzte Woche hatte ich meinen Code wie ein Zauberer. Ich arbeite an einem verwurzelten Tablet, und ich setze den Debug-Modus aus dem Code, aber keine Ahnung, warum ich heute Morgen meine App ausgeführt habe und der Befehl, den ich dazu verwende, nicht mehr funktioniert, bekomme ich " Permission Denial etc .. "ABER, wenn ich den Befehl vom Terminal meines Geräts gebe, funktioniert es ... Irgendwelche Hilfe?pm Zuschuss <PACKAGE_NAME><PERMISSION_NAME> funktioniert nicht

private void grantPermission(){ 
    try { 
     Process suProcess = Runtime.getRuntime().exec("su"); 
     DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); 

     Log.e("PACKAGE", getPackageName()); 

     os.writeBytes("adb shell" + "\n"); 
     os.flush(); 

     os.writeBytes("pm grant "+getPackageName()+" android.permission.CHANGE_CONFIGURATION" + "\n"); 
     os.flush(); 

     os.writeBytes("pm grant "+getPackageName()+" android.permission.WRITE_SECURE_SETTINGS" + "\n"); 
     os.flush(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
     Log.e("SETTINGS", "FAIL"); 
    } 
} 
+0

Hat es jemals aus Code funktioniert? Funktioniert es auch wieder, nachdem Sie es manuell eingestellt haben? – tynn

+0

Ja, tat es, und ja, es tut .. – ArteFact

Antwort

0

Hier ist es! Ich habe es endlich behoben! Die Erlaubnis wurde nicht schnell genug bis zum Anruf gesetzt, ich fügte einfach einen Anruf zur processes Methode waitFor() hinzu und es funktionierte wieder. Aber ich frage mich immer noch, warum es früher einmal funktioniert hat!

private void grantPermission(){ 
    try { 
     Process suProcess = Runtime.getRuntime().exec("su"); 

     DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); 
     os.writeBytes("pm grant "+this.getPackageName()+" android.permission.WRITE_SECURE_SETTINGS" + "\n"); 
     os.writeBytes("pm grant "+this.getPackageName()+" android.permission.CHANGE_CONFIGURATION" + "\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 

     suProcess.waitFor(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen