我能否在我的安卓应用中禁用SystemUI?

8
我使用这个答案实现了我的应用的Kiosk模式:https://dev59.com/wGQn5IYBdhLWcg3wmIAs#26013850 我使用Kingo Root对平板进行了root,然后执行了以下命令:
adb shell >
 su >
 pm disable com.android.systemui >

我正在开发一款应用程序,它将仅作为信息亭在我们的设备上使用...

它的运行很好,但是... 我想从Android应用程序本身执行系统UI的禁用和启用。

是否可以从应用程序内部执行系统命令?


禁用com.android.systemui是否安全?在某些设备上会发生什么不良后果吗? - JohnyTex
2
@JohnyTex:这是一个特殊情况,我需要用户除了使用我的应用程序之外,没有任何其他操作能力。该设备归我的公司所有,并被放置在信息亭中。这样做几乎使退出任何应用程序变得不可能,因为不再有主页按钮、返回按钮或通知下拉区域。 - silversunhunter
我遇到了这样一种情况,即使禁用了systemui,它仍然在运行。请参见:http://android.stackexchange.com/questions/119508/app-is-running-even-though-disabled-why 它被禁用了,为什么还能运行? - JohnyTex
1个回答

14
/**
 * Uses Root access to enable and disable SystemUI.
 * @param enabled Decide whether to enable or disable.
 */
public void setSystemUIEnabled(boolean enabled){
    try {
        Process p = Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(p.getOutputStream());
        os.writeBytes("pm " + (enabled ? "enable" : "disable") 
                + " com.android.systemui\n");
        os.writeBytes("exit\n");
        os.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

运行正常。用法:

setSystemUIEnabled(true);  // Enable SystemUI
setSystemUIEnabled(false); // Disable SystemUI

我即将尝试这个,但我有一个问题。由于我正在使用一款面向新手的root软件(一键root访问),我想知道这个类是否有办法知道它是否具有root访问权限。 - silversunhunter
1
你可以在代码中的某个位置调用 setSystemUIEnabled(true); 来使用此功能。我刚刚测试了一下,运行正常。如何确定是否具有根访问权限可以在这里找到解释:https://dev59.com/4nNA5IYBdhLWcg3wEpgU#8097801。如果它帮助了你,请接受此答案。 - ByteHamster
这会导致设备(hp 7 slate)重新启动。这是设备的问题还是所有设备都会出现,因为我们正在对操作系统进行根本性的更改? - silversunhunter
当您手动输入命令时,它是否也重新启动了?它应该与通过adb键入命令的方式完全相同。在测试过程中,我只是禁用了一个用户应用程序而不是SystemUI,因此无法验证其行为。 - ByteHamster
嘿,这对我不起作用。我有一个已经root的Nexus设备,并且它具有root访问权限,但是导航按钮仍然可见。当我尝试从终端或应用程序中进行时,出现了这种情况。有什么建议吗? - Amit Hooda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接