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

Android全屏应用程序-阻止访问状态栏,android,android-service,fullscreen,android-statusbar,Android,Android Service,Fullscreen,Android Statusbar,我正在创建一个全屏应用程序,它将在“kiosk”模式下运行,因此用户将无法退出。该应用程序被定义为启动器(主屏幕) 清单中的活动定义为: android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 此外,活动在其onCreate()中确保全屏模式: 但是,状态栏似乎仍然可以访问。默认情况下,它是隐藏的,但仍可以通过触摸并向下拉屏幕顶部(在屏幕顶部,它以半透明背景显示,而不是通常的纯黑色) 我已经知道,我可以通过在屏幕顶部添加一个透明的1

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

清单中的
活动
定义为:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
此外,
活动
在其
onCreate()中确保全屏模式:

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

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

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

该设备当前运行的是安卓系统
4.4.4。我相信这可能是在4.4.1之前

这有可能吗?更可能的情况是,安卓系统中的某些东西发生了变化,还是我弄坏了某些东西,或者这些东西一直都被弄坏了,而我只是刚刚注意到

请注意,这是针对无法植根的专用工业设备(霍尼韦尔海豚75e)

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

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

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

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


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

将此代码放入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);
欲知详情

这似乎没有什么区别,从顶部向下拉时,状态栏仍然可见。在沉浸式页面中:“用户可以通过沿系统栏通常出现的区域向内滑动来显示系统栏”。您好,我正在使用同一类型的应用程序。请提供帮助。我正在尝试禁用状态栏,而home和history btnI最终不得不在我的应用程序中使用一个透明的覆盖层来拦截触摸事件。你能与我共享一个代码吗?因为我尝试了,但导航显示在该条的上方
service call activity 42 s16 com.android.systemui  // disable status bar
am startservice -n com.android.systemui/.SystemUIService  // enable status bar
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);