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