Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 锁定屏幕检测主页按钮_Android_Android Homebutton - Fatal编程技术网

Android 锁定屏幕检测主页按钮

Android 锁定屏幕检测主页按钮,android,android-homebutton,Android,Android Homebutton,我最近下载了ACDisplay锁屏应用程序: 应用程序在我的设备上显示一个覆盖,同时检测到活动上的主页按钮单击,因此我无法绕过锁定屏幕。它还可以在非根设备上完全隐藏最近的按钮。这怎么可能 我浏览了以下链接: 所有用于较旧版本的Android的解决方案,或者他们说home按钮点击无法检测到,因为恶意应用程序可能会使用它 此应用程序如何做到这一点 是否有人可以共享示例代码/应用程序,说明如何防止用户在成功验证自己之前退出锁屏应用程序 谢谢。您不能禁用“最近”按钮和“主页”按钮,但您可以使用窗

我最近下载了ACDisplay锁屏应用程序:

应用程序在我的设备上显示一个覆盖,同时检测到
活动上的
主页按钮单击
,因此我无法绕过锁定屏幕。它还可以在非根设备上完全隐藏最近的按钮。这怎么可能

我浏览了以下链接:

所有用于较旧版本的
Android
的解决方案,或者他们说
home
按钮点击无法检测到,因为恶意应用程序可能会使用它

此应用程序如何做到这一点

是否有人可以共享示例代码/应用程序,说明如何防止用户在成功验证自己之前退出锁屏应用程序


谢谢。

您不能禁用“最近”按钮和“主页”按钮,但您可以使用窗口管理器来实现这一点,在一行中,它可以在您的android应用程序屏幕上创建一个覆盖层。

具有设备管理员权限 您可以实用地锁定解锁设备

该应用程序还使用“检索正在运行的应用程序”的权限。android.permission.GET_TASKS
,这样我们就可以检测当前正在运行的前台应用程序。 检查答案。 若用户尝试按home键并离开,我们可以立即检查应用程序是否处于关闭状态,并再次启动我们的活动。(它的解决方法是检测用户是否使用Home键离开应用程序)

检查我的应用程序 在任何无法绕过的应用程序上添加锁屏覆盖。使用相同的检查前台运行应用程序


@用户251182 -创建的示例应用程序在设备锁定时只加载活动,在设备解锁时加载另一个活动

**这只是一个演示,您必须使用带有后台服务的接收器来继续监视设备锁定状态并处理内存泄漏。使用Android 6 API 23进行测试 无需监控正在运行的应用程序,因为这仅用于设备锁定屏幕

**检查锁屏活动中的“如何回家”按钮按下事件

            WindowManager windowManager  = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            } else {
                layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
            }
            layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
            layoutParams.x = 0;
            layoutParams.y = 0;
            layoutParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
            View window = LayoutInflater.from(this).inflate(R.layout.activity_main, null, false);

            windowManager.addView(window, layoutParams);
下面的代码根据需要阻止home、back和recents按钮

还需要清单中的以下权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


那么应用程序是如何做到这一点的呢?我使用过它,但我不知道它内部是如何工作的。您能否提供一个示例应用程序,演示如何在用户锁定和解锁设备时将图像显示为锁屏?@user251182使用示例项目更新答案。在lockscreen中,它隐藏菜单按钮,还可以获取主页按钮按下事件、检查日志。您指向的stackoverflow链接清楚地表明,Android L和更高版本已经不推荐这种方法。在您的示例中,当我按下锁定按钮时,设备不会进入睡眠状态,因为有意图。我试图复制的是与ACDisplay相同的行为,如果屏幕重新打开,锁定屏幕已经可见。请注意,它已经可见。换言之,如果我按下电源按钮,锁定屏幕应该在不唤醒设备的情况下出现,当我唤醒设备时,锁定屏幕应该已经就位。@User251182,正如您询问的“示例应用程序如何在用户锁定和解锁设备时将图像显示为锁定屏幕”,演示仅在设备锁定和解锁时启动活动。正如我在编辑中提到的,get running任务不是必需的,因为这仅在设备锁定时使用。如果您只需要get screen on/off事件,您可以注册filter.addAction(Intent.ACTION\u screen\u on);当广播事件接收时,也可以启动活动,并且永远运行该活动,您必须使用该服务。