我正在尝试在已扎根的android设备上实现Kiosk应用程序,并且需要完全禁用导航和状态栏。

这些命令可从adb shell运行

禁用:

service call activity 42 s16 com.android.systemui


启用:

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


那很好!现在,我需要能够通过我的应用程序执行此操作。因此,禁用我已经尝试过:

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


在我的活动中按下按钮时。但是什么也没发生,也没有抛出异常。但是,会弹出一个祝酒词,说该应用已被授予超级用户权限。

有任何想法吗?

最佳答案

要运行su cmd,您可以使用此命令

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();
    }
}


要禁用系统用户界面,您可以运行以下命令

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


如果要启用返回

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

08-04 05:18