【问题标题】:Enable Disable System UI on AOSP Build programmatically以编程方式在 AOSP Build 上启用禁用系统 UI
【发布时间】:2015-12-18 17:20:10
【问题描述】:

我使用 Android 4.4.4 源构建了我的 AOSP 自定义 ROM。我想做一个自助服务终端模式应用程序(始终全屏 - 用户不可能离开它或切换到另一个应用程序)。

为了获得完全沉浸式的模式,我关注了这篇 SO 帖子 Enabling KioskMode in Android 4.4.2 with Root

我完全按照他们说的做了,但它不起作用。系统 UI 未禁用,我没有错误。

所以我决定创建一个我从 Android SDK 代码运行的 .sh 文件:

Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "/etc/stop-ui.sh" });

完美运行。但是当我想再次启动系统 UI 时: Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "/etc/start-ui.sh" }); 它返回错误 1。

当我从 adb shell 运行 /etc/start-ui.sh 时,它可以工作。

这是我的 stop.sh(权限为 555)文件:

#!/system/bin/sh
service call activity 42 s16 com.android.systemui

这是我的 start.sh(权限为 555)文件:

#!/system/bin/sh
am startservice -n com.android.systemui/.SystemUIService

我的应用是系统应用(我使用平台签名对其进行了签名)

结论:我可以从 shell 重新启动系统 UI,但不能以编程方式从应用程序重新启动

【问题讨论】:

    标签: android android-4.4-kitkat android-source kiosk-mode


    【解决方案1】:

    我有这 2 种方法(在 root 手机上),它们运行良好:

    public static void hideSystemUi(){
        try {
            Build.VERSION_CODES vc = new Build.VERSION_CODES();
            Build.VERSION vr = new Build.VERSION();
            String ProcID = "79"; //HONEYCOMB AND OLDER
    
            //v.RELEASE  //4.0.3
            if(vr.SDK_INT >= vc.ICE_CREAM_SANDWICH){
                ProcID = "42"; //ICS AND NEWER
            }
            Process proc = Runtime.getRuntime().exec(new String[]{
                    "su","-c","service call activity " + ProcID + " s16 com.android.systemui"});
    
            proc.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void showSystemUi(){
        try {
            Process proc = Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");
            proc.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    尝试在am startservice -n com.android.systemui/.SystemUIService 命令中传递用户ID。在我的情况下,它是0(root 用户 ID)。

    【讨论】:

    • 哇,感谢它与添加 --user 0 一起使用。这很奇怪。为什么没有它就不能工作?在许多其他 SO 帖子上,人们没有 --user 0 选项,它可以工作。谢谢顺便说一句,你帮了我很多。
    • 第一种方法有效,但第二种方法无效。手动返回systemUI 也不容易:(
    • 如果我运行服务调用活动 42 s16 com.android.systemui,systemUi 会消失,但设备也不再接受任何输入。 am startservice -n com.android.systemui/.SystemUIService
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2011-05-05
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多