如何禁用Android中的Home和其他系统按钮?

use*_*024 78 android locking kiosk

我需要在Android应用程序中禁用Home和其他系统按钮.

例如: MX Player(见谷歌播放) -你可以按"锁定"在播放器屏幕上的图标,并锁定所有的硬件和软件系统的按钮.

它工作正常,没有根本.

我在一些具有不同Android版本的设备上测试了它.我试图拆解Kids Lock(插件),但不知道它是如何工作的.

我需要像Kids Lock(插件)这样的解决方案MX Player: - 禁用Home,Back和所有其他系统按钮.

有什么建议?

Ass*_*iel 90

首先,如果你真的想要禁用Home按钮或任何其他按钮(例如Back按钮),请考虑很长很难,这不是应该做的事情(至少大多数时候,这是一个糟糕的设计).我只能为自己说话,但如果我下载的应用程序不允许我点击操作系统按钮,我接下来要做的就是卸载该应用并留下非常糟糕的评论.我也相信你的应用程序不会在App Store上展示.

现在...

请注意,MX Player要求在其他应用程序之上绘制权限:MX Player权限
由于您无法覆盖设备Home上的按钮Android(至少在最新的OS版本中没有).MX Player当您"锁定"应用程序并单击Home按钮时,将自己绘制在启动器的顶部.
要看到一个更简单和直接理解的例子,你可以看到Facebook Messenger App.

当我被要求提供有关MX Player Status BarNavigation Bar"overriding"的更多信息时,我正在编辑我的答案以包含这些主题.

首先,MX Player正在使用沉浸式全屏模式(DevBytes Video)KitKat.
Android 4.4(API Level 19)为setSystemUiVisibility()引入了一个新的SYSTEM_UI_FLAG_IMMERSIVE标志,让你的应用真正"全屏".此标志与SYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_FULLSCREEN标志结合使用时,会隐藏导航和状态栏,让您的应用程序捕获屏幕上的所有触摸事件.

启用沉浸式全屏模式后,您的活动将继续接收所有触摸事件.用户可以通过沿系统条通常出现的区域向内滑动来显示系统条.这将清除SYSTEM_UI_FLAG_HIDE_NAVIGATION标志(以及SYSTEM_UI_FLAG_FULLSCREEN标志,如果应用),以便系统栏变为可见.这也会触发您的View.OnSystemUiVisibilityChangeListener(如果已设置).但是,如果您希望系统栏稍后自动隐藏,则可以改为使用SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志.请注意,标志的"粘性"版本不会触发任何侦听器,因为在此模式下临时显示的系统栏处于瞬态状态.

第二:隐藏状态栏
第三:隐藏导航栏
请注意,虽然使用沉浸式全屏仅用于KitKat隐藏Status Bar,Navigation Bar但不仅仅是KitKat.

关于第二和第三,我没有太多话要说,你得到了我相信的想法,无论如何都是快速阅读.请确保密切关注View.OnSystemUiVisibilityChangeListener.

我添加了一个Gist,它解释了我的意思,它不完整,需要一些修复,但你会得到这个想法.https://gist.github.com/Epsiloni/8303531

祝你好运,实现这一目标,玩得开心!

  • 仅供参考,一些应用程序需要锁定.例如,kiosk类型的应用程序,其中所有者允许临时访问该硬件.我现在正在创建一个照相亭应用程序,我不希望用户(拍摄照片的人)除了拍照(以及其他一些东西)之外还能做任何事情.所有者可以通过软件按钮解锁,但是否则需要关闭.对不起,但是你在回答开始时的"母亲建议"让我(并且我确信包括OP在内的其他人)的方式错了.谢谢你的回答,我会调查一下. (7认同)
  • 好的,这有很多帮助,但我们还没有.我要写两条评论,一条是KitKat,一条是Jelly Bean.对于KitKat,使用标志`TYPE_SYSTEM_ALERT`,`SYSTEM_UI_FLAG_HIDE_NAVIGATION`和`SYSTEM_UI_FLAG_IMMERSIVE_STICKY`,无法退出应用程序.两个系统栏都隐藏起来.***除非***打开电源菜单.然后导航栏再次出现,主页按钮变为功能.*MX Player*设法在这种情况下隐藏导航栏.因此,对于运行KitKat的设备,我们仍然需要解决这个问题. (2认同)

Lê *_*Duy 13

我按照shaobin0604的回答,我终于设法锁定HOME按钮,添加:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml所有你需要做的就是复制HomeKeyLocker.java杨少斌的lib到项目,并实现它就像在杨少斌的例子.BTW:我的AVD的Android版本是Android 4.0.3.


sha*_*604 12

您可以使用Android-HomeKey-Locker禁用HOME KEY和其他系统键(例如BACK KEY和MENU KEY)

希望这会对您的申请有所帮助.谢谢.


tag*_*y22 10

您可以使用此处提到的屏幕固定功能禁用Android 5.0的主页和最近按钮:

Android 5.0引入了一种新的屏幕固定API,可让您临时限制用户离开任务或被通知中断.例如,如果您正在开发教育应用程序以支持Android或单一用途或自助服务终端应用程序的高风险评估要求,则可以使用此方法.一旦您的应用激活屏幕固定,用户就无法看到通知,访问其他应用或返回主屏幕,直到您的应用退出该模式.

您可以将设备锁定为自助服务终端.导航栏未隐藏,但根据激活模式的方式,可以删除或禁用主页和最近按钮.我在这里测试了这个功能后写了一些信息.


mol*_*arm 6

只是一个猜测,但我认为使用SYSTEM_ALERT_WINDOW权限(显示为"绘制其他应用程序",请参见此处)可能:将您的应用程序显示为全屏,系统警报类型窗口.这样,它会隐藏任何其他应用程序,即使是主屏幕,所以如果你按Home键,它不会真的被禁用,只是没有任何明显的效果.

MX Player已经宣布了这个权限,并且Facebook Messenger也有它用于显示任何东西的" 聊天头 " - 所以它可能是解决方案.

更新(从我的评论中添加):接下来,使用SYSTEM_UI_FLAG_HIDE_NAVIGATION结合捕获触摸事件/使用OnSystemUiVisibilityChangeListener覆盖默认行为(触摸时出现导航栏).此外,由于您说退出沉浸式手势不起作用,您也可以尝试设置SYSTEM_UI_FLAG_IMMERSIVE_STICKY(使用SYSTEM_UI_FLAG_FULLSCREEN和SYSTEM_UI_FLAG_HIDE_NAVIGATION).