2017-01-25 4 views
1

Ich versuche, eine Kiosk-App auf einem gerooteten Android-Gerät zu implementieren, und ich muss die Navigations- und Statusleiste vollständig deaktivieren.Android-Navigation und Topbar entfernen,

Diese arbeitet Befehle von adb shell

Disable:

service call activity 42 s16 com.android.systemui 

Enable:

am startservice -n com.android.systemui/.SystemUIService 

Das ist gut! Jetzt muss ich es von meiner App aus tun können. Also zum Deaktivieren habe ich versucht:

Process process = Runtime.getRuntime().exec("su service call activity 42 s16 com.android.systemui"); 

wenn ich einen Knopf in meiner Tätigkeit drücke. Aber nichts passiert und keine Ausnahmen werden geworfen. Ein Toast taucht jedoch auf und sagt, dass die App Super-User-Rechte erhalten hat.

Irgendwelche Ideen?

Antwort

3

auszuführen su cmd können Sie diese verwenden

public static void runCmd(String cmd) { 
    DataOutputStream os; 
    try { 
     Process process = Runtime.getRuntime().exec("su"); 
     os = new DataOutputStream(process.getOutputStream()); 
     os.writeBytes(cmd + "\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 
     os.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Um die System ui deaktivieren Sie können diesen Befehl ausführen

runCmd("pm disable com.android.systemui && service call activity 42 s16 com.android.systemui"); 

Wenn Sie möchten wieder aktivieren

runCmd("pm enable com.android.systemui && am startservice -n com.android.systemui/.SystemUIService"); 
+0

perfekt funktionierten! VIELEN DANK! – Jolle

+0

Wenn ich diesen Befehl ausführe, verschwindet die Navigationsleiste, aber ich kann den Bildschirm nicht mehr berühren – alexislg

+0

@alexislg Haben Sie dieses nicht berührbare Bildschirmproblem gelöst? Kann es nicht auf API 23+ (Marshmallow) funktionieren ... –

0

Split su Anruf und Befehlsaufruf:

try{ 
    Process su = Runtime.getRuntime().exec("su"); 
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); 

    outputStream.writeBytes("service call activity 42 s16 com.android.systemui"); 
    outputStream.flush(); 

    outputStream.writeBytes("exit\n"); 
    outputStream.flush(); 
    su.waitFor(); 
}catch(IOException e){ 
    throw new Exception(e); 
}catch(InterruptedException e){ 
    throw new Exception(e); 
} 
0

Mit Android 5 und mehr, können Sie diesen Trick versuchen:

settings put secure user_setup_complete 0 
+0

Dies entfernt nicht die Navigationsleiste deaktiviert nur die Home-Taste. –

+0

Auf meinem Gerät entfernt es alles. Meine App ist im Immersive-Modus – alexislg

+0

Oh, ich sehe es jetzt. Ich dachte, es würde genauso funktionieren wie "Service Call Activity ...". –

Verwandte Themen