我的应用程序包含敏感的用户信息,我们需要实现一个密码屏幕,以便在用户打开应用程序时显示。这是我在阅读这篇文章后尝试的两种方法。
使用静态变量并将其重置
onStop()
为每个活动,并在每个活动中再次检查它,onStart()
如果时间超过最小阈值,例如 1-2 秒,则显示密码屏幕。这种方法的问题是我的应用程序还使用意图来调用相机和条形码扫描仪,用户可能会在这些外部应用程序中花费更长的时间。在这种情况下,我可以提高阈值,但这会使计算变得复杂,并不是一个很好的解决方案。我使用这种方法尝试了另一种方法。
protected boolean isAppOnForeground(final Context context) { List<RunningAppProcessInfo> appProcesses = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses(); if (appProcesses == null) { return false; } final String packageName = context.getPackageName(); for (RunningAppProcessInfo appProcess : appProcesses) { if ((appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) && appProcess.processName.equals(packageName)) { return true; } } return false; }
但是,当我在每个活动的 onStart 方法中检查它时,这将始终返回 true,因为该进程在它处于 onStart 时已经启动
当用户打开应用程序时,我可以采取任何其他方法来显示密码吗?即使用户单击主屏幕退出应用程序,然后从最近的应用程序返回应用程序,它也应该显示。