【问题标题】:Android fullscreen app - prevent access to status barAndroid 全屏应用 - 阻止访问状态栏
【发布时间】:2016-07-22 15:39:30
【问题描述】:

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

清单中的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 系统覆盖窗口来吸收触摸事件来防止这种情况。但我删除了这个 hack,因为我认为没有必要。

我确信这一切正常,并且在不求助于黑客的情况下阻止了状态栏的显示。但是某处发生了一些变化。我已更新到最新的库存固件和系统软件 - 也许这改变了这一点?

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

这曾经可能吗?更有可能是 Android 中的某些内容发生了变化,还是我损坏了某些东西,或者这一直都被损坏了而我才注意到?

请注意,这是针对无法植根的专用工业设备(Honeywell Dolphin 75e)。

【问题讨论】:

  • 您好,我正在开发相同类型的应用程序,请您帮忙。我正在尝试禁用状态栏以及主页和历史记录 btn
  • 我最终不得不在我的应用程序中使用透明覆盖层来拦截触摸事件。
  • 你能和我分享一个代码吗,因为我试过了,但导航显示在棒上方

标签: android android-service fullscreen android-statusbar


【解决方案1】:

不过,状态栏好像还是可以访问的。

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

重启持久解决方案

重命名/system/app/SystemUI.apkapk 扩展名或完全删除文件。您必须重新挂载/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

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

【讨论】:

    【解决方案2】:

    将此代码放入 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

    【讨论】:

    • 这似乎没有任何区别,从顶部下拉状态栏仍然可见。从沉浸式页面:“用户可以通过向内滑动系统栏通常出现的区域来显示系统栏”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多