在Android ICS上隐藏系统栏的简便方法

时间:2012-05-04 08:16:51

标签: android fullscreen android-4.0-ice-cream-sandwich kiosk-mode

我会为用户提供ICS平板电脑以完成调查,因此我希望用户仅使用我的应用。他们不应该切换到主屏幕,按后退按钮等,所以我想完全隐藏系统栏。

我的平板电脑已植根,我知道一些应用程序 this可以帮助我,但我不需要此应用程序的所有额外功能。

我发现this tutorial可以帮助我,但如果我可以添加代码来做我自己的,那就太棒了。

8 个答案:

答案 0 :(得分:11)

在互联网上进行了大量搜索之后,我设法让系统栏隐藏并出现在4.2设备中:

隐藏:

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

或者对于少于14的API使用79而不是42.您可能还需要包含SET_DEBUG_APP权限,在这种情况下,您需要使用系统密钥签署应用程序或将其安装在/ system / app /目录中。

显示:

Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");

或者有些人使用-a(而不是-n)选项,虽然这会导致我的设备出错:

错误:未找到;没有服务开始。

对于Android 4.4,有一项名为沉浸式模式的新功能,它隐藏了系统和状态栏。用户通过使用屏幕顶部或底部的边缘滑动来切换系统UI。有关详细信息,请查看:

http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int)

Using new IMMERSIVE mode in android kitkat

例如:

getWindow().getDecorView().setSystemUiVisibility(
          View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE)

答案 1 :(得分:8)

HideBar具有专门针对此用例的信息亭模式。

http://ppareit.github.com/HideBar/可免费下载。 您也可以在市场https://play.google.com/store/apps/details?id=be.ppareit.hidebar找到它。

如果您想将其合并到您自己的测试/调查应用程序中,您可以随时联系开发人员(请参阅电子邮件的链接)。可以解释代码,也可以提供隐藏Intent

答案 2 :(得分:6)

检查此链接:(需要root) http://android.serverbox.ch/?p=306

此处也发布了类似的问题: Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation

或尝试HideBar http://ppareit.github.com/HideBar/

实际上你只需将系统栏置于“熄灯”模式,系统栏按钮和通知就会变暗。

View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);

答案 3 :(得分:4)

我想在现有回复中添加一些信息,希望它对某人有用。

要在我的低成本中国平板电脑上获得真正的全屏工作,我需要编辑位于

的文件
system/build.prop

替换文字

ro.property.tabletUI=true

#ro.property.tabletUI=true

(我评论这一行)。之后,我可以使用

获得全屏
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

对于minfest.xml中的每个活动

此解决方案只有在您的应用程序销售平板电脑且需要root权限才能编辑system/build.prop时才有效。 所以它不是所有的解决方案,所以请不要低估这一点贡献。

修改 我注意到我的平板电脑在框架上有硬件按钮(Home,menù和back)。所以Android让我隐藏系统栏。我试过没有硬件按钮的其他平板电脑没有成功

答案 4 :(得分:3)

谷歌打算将Android仅用于消费者。他们将System UI栏更紧密地集成到Android ICS(4.0)中,以防止人们使设备生根并以此方式查杀。尝试删除系统栏进程将阻止操作系统完全启动。

如果您想限制用户访问主屏幕,那么您对Android ICS感到不满意。我建议找一个能用Android 2.3预装设备的平板电脑制造商。要么是这样,要么使用root的Android 3.x设备。

如果您打算将Android用于自助服务终端或锁定设备,那么您最好定位一个更开放的操作系统。

答案 5 :(得分:2)

我找到了一个解决方案,在我的使用案例中,即使在NOT ROOTED设备上隐藏菜单栏也能像魅力一样:

设置此标志

layoutparams.flags = 0x80000000 | layoutparams.flags;

到我的窗口的布局参数只是诀窍!

这是我使用的完整代码段:

    Window window = getWindow();
    android.view.WindowManager.LayoutParams layoutparams = window.getAttributes();
    layoutparams.flags = 0x80000000 | layoutparams.flags;
    window.setAttributes(layoutparams);

在我的活动onCreate。

为了找到这个,我反向改造了一个非系统的Ap​​k,我发现它能以某种方式做到这一点。

根据官方文件:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

" 0x80000000"是作为Api级别21的系统常量引入的FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,它基本上表示"此窗口负责绘制系统条的背景。"由于我没有手动绘制任何系统栏,因此不显示任何菜单栏。

我只在运行Android ICS 4.0.3的一对Moverio BT-200上进行了测试,因为这是我目前正在使用的设备,也因为我现在没有其他设备在运行Api我手下的19级之前的水平来测试它。

答案 6 :(得分:0)

有一种解决方法可以禁用所有平板电脑中的菜单栏(不隐藏)而无需生根。但这有点棘手,但它干净利落。目前市场上的几个知名应用程序使用此策略为其应用程序实现此禁用菜单栏功能。

  • 授予管理员权限(需要一次性用户参与才能激活)。
  • 设置密码&使用设备管理员配置文件api以编程方式锁定设备。
  • 然后在本机锁定屏幕上加载任何UI。 (当然,每当活动之间发生转换时,这将显示背景锁定屏幕。但如果逻辑组织良好,那么它将是平滑的并且不会被用户注意到)
  • 当需要启用时,使用设备策略管理器对象的resetPassword(“”,0)将密码重置为“”。

答案 7 :(得分:0)

为了补充已经给出的答案,并且如果它对需要类似行为的人有用,那么有针对Android设备4.0及更高版本的教程,它会告诉你如何隐藏导航栏和状态栏(它们将会再次触摸屏幕时重新出现):

https://developer.android.com/training/system-ui/navigation.html

我意识到这不是你所需要的,但对于那些看到这个问题的人来说可能会有用。