我最近下载了ACDisplay锁屏应用程序:
https://play.google.com/store/apps/details?id=com.achep.acdisplay
该应用程序显示我的设备上的覆盖,同时同时检测home button click
上的activity
,以便我无法绕过锁定屏幕。它也能以某种方式完全隐藏在非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
按钮点击,因为它可以被恶意应用程序使用。
这个应用程序如何能够这样做?
有人可以共享示例代码/应用程序,以防止用户退出锁定屏幕应用程序,直到他们成功验证自己为止?
谢谢。
使用设备管理员权限https://developer.android.com/guide/topics/admin/device-admin,您可以实用地锁定解锁设备。
该应用程序还使用“检索正在运行的应用程序”android.permission.GET_TASKS
的权限,因此我们可以检测当前前台运行的应用程序。检查答案。 https://stackoverflow.com/a/17756786/1025070,如果用户试图按回家并离开,我们可以即时检查应用程序不在forground,并重新启动我们的活动。 (其解决方法是检测用户是否通过Home press离开应用程序)。
检查我的应用程序https://play.google.com/store/apps/details?id=com.udayalakmal.applock&hl=en,在任何无法绕过的应用程序上添加锁屏叠加。使用相同的检查前台运行的应用
@ user2511882 - 创建的示例应用程序,只需在设备锁定时加载活动,在设备解锁时加载另一项活动
https://github.com/UdayaLakmal/LockScreenDemo
**这只是一个演示,您必须使用具有后台服务的接收器来继续监视设备锁定状态并处理内存泄漏,。使用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" />
你不能禁用最近的按钮和主页按钮,但你可以通过使用窗口管理器link实现这一点,在一行中它创建一个覆盖你的Android应用程序屏幕。