Android全屏应用 - 阻止访问状态栏

问题描述 投票:2回答:2

我正在创建一个全屏应用程序,它将以“kiosk”模式运行,因此用户将无法退出。该应用程序被定义为启动器(主屏幕)。

清单中的Activity定义为:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

此外,Activity确保全屏模式,其onCreate()中包含以下内容:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

但是,似乎状态栏仍然可访问。它默认是隐藏的,但它仍然可以通过触摸和拉下屏幕顶部来显示(它显示的是半透明背景而不是通常的纯黑色)。

我已经知道我可以通过在屏幕顶部添加透明的10px系统覆盖窗口来阻止这种情况,这将吸收触摸事件。但我删除了这个黑客,因为我认为没有必要。

我确信这一切都很好,并阻止状态栏显示而不诉诸hackery。但某些地方发生了变化。我已经更新到最新的固件和系统软件 - 也许这改变了这个?

该设备目前正在运行Android 4.4.4。我相信它可能在4.4.1之前。

这有可能吗?更有可能是Android发生了变化,或者我已经破坏了某些东西,或者这种情况一直都被打破了,我只是注意到了吗?

请注意,这适用于无法生根的专业工业设备(霍尼韦尔Dolphin 75e)。

android android-service fullscreen android-statusbar
2个回答
1
投票

但是,似乎状态栏仍然可访问。

是的,因为com.android.systemui包正在运行,它负责状态栏和软件导航栏。以下是禁用该软件包的几个解决方案。请注意,为了使用解决方案,需要扩展权限(理想情况为root)。

重启持久解决方案

重命名apk/system/app/SystemUI.apk扩展名或完全删除该文件。您必须重新安装/system分区,因为它默认为只读。重命名/删除系统后,可能会卸载/data/data/com.android.systemui包。如果没有,请手动执行,然后重新启动。

重启无常解决方案

通过调用(至少在KitKat之前有效)在运行时(例如,在应用程序启动时)禁用/启用框架服务:

service call activity 42 s16 com.android.systemui  // disable status bar

am startservice -n com.android.systemui/.SystemUIService  // enable status bar

请注意,解决方案在重新启动时不会持久。


0
投票

把这段代码放在oncreate方法中

int myflag= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

getWindow().getDecorView().setSystemUiVisibility(myflag);

了解更多详情https://developer.android.com/training/system-ui/immersive.html

© www.soinside.com 2019 - 2024. All rights reserved.