【问题标题】:Android - Removing home and navigation buttonAndroid - 删除主页和导航按钮
【发布时间】:2015-12-03 11:22:03
【问题描述】:

我正在尝试删除主页按钮和多线程按钮。这个想法是从正在运行的应用程序中完全删除它,如果我们可以从我们正在使用的平板电脑上的每个应用程序中完全删除它会更好。使用全屏不是我们想要的,因为用户不应该能够退出全屏模式,即使他想要它(这是一个定制的商业应用程序,出于多种原因,这是所需的行为)。

这是 Nexus 10 上的结果。我们通过在编译 CyanogenMod 之前获取 SystemUI 源并更改它们来实现这一点。

不幸的是,我们必须在没有可用 CyanogenMod 的华硕 ZenPad 10 中复制它。我们有一个版本可以让我们创建系统应用程序,但是将每个应用程序都变成系统应用程序并不是我们想要的。

我们在这个链接中找到了:http://developer.oesf.biz/em/developer/reference/eggplant/constant-values.html#android.view.View.STATUS_BAR_DISABLE_HOME

有禁用主页按钮和导航按钮的标志,但它们仅可用于系统应用程序。

我们已尝试获取已在平板电脑中编译的 SystemUI.apk,对其进行反编译并进行更改。问题是,或者我们有无用的 smali 文件,或者只有 res/ 和 AndroidManifest.xml 文件(华硕将 SystemUI.apk 更改为它自己的两个 apk)。

所以...我们在这里有点绝望啊哈。寻找提示/想法以尝试删除该按钮。最好不要重新编译或做一些奇怪的事情。

【问题讨论】:

  • 如果您只需要一个运行全屏的应用程序,您可以尝试另一种 hack。您可以在后台运行服务,它会定期检查您的全屏应用程序是否处于活动状态,并且当用户尝试离开您的应用程序时,服务会立即再次启动您的应用程序。这不是您想要的,但也许可以提供帮助

标签: java android android-homebutton


【解决方案1】:

这可以通过使用Immersive Full-Screen Mode 等权限与SYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_FULLSCREEN 标志的组合来实现。这些标志隐藏了导航和状态栏,现在您有一个空白屏幕,在屏幕底部放置一个线性布局,只有后退图标可见,只是为了创建您想要的效果。另请注意,重要的是要了解,一旦用户向上滑动,正常的导航栏将可见(不确定是否可以通过拦截触摸事件处理)。

或者,您也可以尝试这里提到的这个解决方案 How to disable Home and other system buttons in Android?

也可以参考这个 github 项目(如果只有硬件导航按钮就可以) https://github.com/shaobin0604/Android-HomeKey-Locker

最后但并非最不重要的是,commsware 提供的一个答案可能会派上用场。 Not able disable Home button on specific android devices

【讨论】:

  • 谢谢,但我已经尝试了您提出的所有解决方案,但没有一个适合这种情况。第一个是可以的,但我们需要一个永久的解决方案,而不是用户可以避免的东西。实际上,启动器已经删除了按钮,但是我们的应用程序的 Activity 又把它们放回去了。也许我们可以尽量避免 Activity 重置按钮(虽然不知道该怎么做)
  • 包括沉浸模式,看看这个。 developer.android.com/training/system-ui/immersive.html
  • 是的,使用可以摆脱那个
  • 安卓设备所有者设置是否也失败了
  • 我没明白... :(
【解决方案2】:

尝试Android for work APIsrefer here。使用此API,您可以完全控制设备并禁用您想要的任何东西。该设备只能用于单个应用程序。

企业所有的一次性使用 (COSU) 是共享或专用设备的企业责任方案的一个子集。与与单个员工相关联的公司责任设备不同,COSU 设备与特定的业务功能相关联。例如,COSU 设备可能用作信息亭。

您还可以尝试集成由 OEM/MDM 供应商/MDM 合作伙伴(如三星、HTC、Airwatch 等)提供的自定义 MDM(移动设备管理)解决方案。这也适用于棒棒糖之前的设备和提供比默认android解决方案更多的API来控制设备。

我知道三星 MDM/Knox 解决方案很好,它有 API 来控制设备的每个部分。参考-http://www.samsung.com/levant/business/solutions-services/mobile-solutions/security/mobile-device-management他们有类似于 COSU 的 Kiosk 模式。

【讨论】:

  • 感谢您的提示。看起来这是最好的答案,但我必须检查它是否真的适用于棒棒糖。正在努力:)
  • 我要等谷歌的答复 :( 看看他们是否会及时答复
  • @Filnik 我猜它也适用于棒棒糖。否则,如果可行,您可以尝试 OEM/其他供应商提供的解决方案。也更新了答案。
  • 不确定这是否有效。我已经要求访问 Android Work.. 仍然没有。谢谢你的回答
【解决方案3】:

您将向用户请求权限。在这辆车里,这就是你自己。请小心,因为您必须实现退出应用程序的方法。

参考:disable home

或者你可以买一个盒子把它贴在身边,这样按钮就不会被看到...

【讨论】:

  • 不幸的是,该解决方案不是永久性的……是吗?我们应该避免用户再次启用导航栏
  • 如果它是永久的,你将如何重新启用它?
  • 类似的东西:play.google.com/store/apps/… ?
  • 你不会的。这个想法是把平板电脑卖给没有主页和导航按钮的客户,以防止他退出上面唯一的应用程序。我们试图将“按钮移除”放在启动器中。实际上它在主屏幕上工作,但是当我们启动应用程序时,按钮再次出现。什么?啊哈 :) 谢谢你的帮助!
  • 您应该找到设备销售商并要求这样做。您不应该购买平板电脑并对其进行调整。你为什么要这样做?
【解决方案4】:

使用沉浸模式,在 onResume() 中使用这段代码,这样每次你回到你的活动时它就会运行并且它们被隐藏

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                          | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                          | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                          | View.SYSTEM_UI_FLAG_FULLSCREEN
                          | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

【讨论】:

  • 是的,但这不是固定的。用户可以从中逃脱
【解决方案5】:

当然,您不能删除任何系统按钮,例如电源音量+/-主页返回菜单。只有当 HomeBackMenu 是虚拟的(与 Solid Button 相对)。

同时,隐藏导航栏是有限的。它只能在 Android 4.0 及更高版本上完成。所以,如果你想这样做,你需要使用SYSTEM_UI_FLAG_HIDE_NAVIGATION 标志。这个 sn-p 隐藏了导航栏和状态栏:

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

而且,如果您想将应用程序的内容设置为显示在导航栏后面,则需要SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 标志。您可能还需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE 来帮助您的应用保持稳定的布局。

【讨论】:

    【解决方案6】:

    我已经尝试了很长时间并且搜索了很多 但如您所知,HOME 按钮是用户退出的唯一途径 任何情况下的任何应用程序。阻止它非常冒险,谷歌不会允许它。

    您可以做的一件事是将您的应用程序设置为启动器应用程序,然后您可以接收 keyevent Home

    【讨论】:

    • 这里非常不鼓励仅链接的答案,因为这些链接将来可能会失效。我建议您使用您引用的来源中的引用来编辑您的答案。
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多