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

时间:2016-07-22 15:39:31

标签: android android-service fullscreen android-statusbar

我正在创建一个全屏应用,它将以“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);

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

重新启动持久性解决方案

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

重新启动无常解决方案

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

/data/data/com.android.systemui

KitKat

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

答案 1 :(得分: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