锁屏检测主页按钮

Lock Screen detect home button

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

https://play.google.com/store/apps/details?id=com.achep.acdisplay

该应用程序在我的设备上显示覆盖图,同时还在 activity 上检测 home button click,因此我无法绕过锁定屏幕。它也能以某种方式完全隐藏非 root 设备上的 recent button。这怎么可能?

我浏览了以下链接:

Detect home button press in android

How can I detect user pressing HOME key in my activity?

How can I detect user pressing HOME key in my activity?

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

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

有人可以分享示例 code/app 如何防止用户在成功验证自己之前退出锁屏应用程序吗?

谢谢。

你不能禁用最近按钮和主页按钮,但你可以通过使用 Window 管理器 link 来实现,在一行中创建一个覆盖您的 android 应用程序屏幕。

具有设备管理员权限 https://developer.android.com/guide/topics/admin/device-admin 您可以实用地锁定解锁设备。

该应用程序还使用 "retrieve running apps" android.permission.GET_TASKS 的权限,因此我们可以检测当前前景 运行 应用程序。 检查答案。 这样一来,如果用户尝试按主页并离开,我们可以立即检查应用程序是否在前台,并再次重新启动我们的 activity。 (它的解决方法是检测用户是否通过按下主屏幕离开应用程序)。

查看我的应用程序https://play.google.com/store/apps/details?id=com.udayalakmal.applock&hl=en 在任何无法绕过的应用程序上添加锁屏覆盖。使用相同的检查前景 运行 app.


@user2511882 - 创建了示例应用程序,当设备锁定时仅加载 Activity,当设备解锁时加载另一个 activity

https://github.com/UdayaLakmal/LockScreenDemo

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

**检查我如何在锁屏中获取主页按钮按下事件 activity。

            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);

以下代码根据要求屏蔽了主页、后退和最近使用的按钮。

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

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