删除 Android 导航和顶部栏,

Removing Android navigation and topbar,

我正在尝试在获得 root 权限的 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");

按下我的 activity 中的按钮时。但是没有任何反应,也没有抛出异常。不过会弹出一个祝酒词,说该应用程序已被授予超级用户权限。

有什么想法吗?

拆分 su 调用和命令调用:

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

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

要禁用系统 ui 你可以 运行 这个命令

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");

有了 Android 5 和 6,你可以试试这个技巧:

settings put secure user_setup_complete 0