锁屏检测主页按钮

时间:2019-03-18 15:05:39

标签: android android-homebutton

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

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

应用程序在我的设备上显示了覆盖图,同时还检测到home button click上的activity,因此我无法绕过锁定屏幕。它还可以完全隐藏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按钮的单击无法检测到,因为它可以被恶意应用程序使用。

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

有人可以共享示例代码/应用程序,以说明如何防止用户在成功通过身份验证之前退出锁屏应用程序吗?

谢谢。

3 个答案:

答案 0 :(得分:4)

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

该应用程序还使用“检索正在运行的应用程序” android.permission.GET_TASKS的权限,因此我们可以检测到当前正在运行的前台应用程序。 检查答案。 https://stackoverflow.com/a/17756786/1025070 如果用户尝试按回家键离开我们,我们可以立即检查应用程序是否在前台,然后再次启动我们的活动。 (它的变通方法是检测用户是否可以通过按Home键离开应用)。

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


@ user2511882 -创建了示例应用,仅在设备锁定时加载活动,而在设备解锁时加载另一个活动

https://github.com/UdayaLakmal/LockScreenDemo

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

**检查我如何在“锁屏”活动中获得“主页”按钮按下事件。

答案 1 :(得分:1)

            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" />

答案 2 :(得分:0)

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